2017-07-11 30 views
6

我建立了一个API的Laravel 5.4,使用Laravel护照3进行身份验证。我所有的API方法返回一个组值总是返回,successerrors(如果有任何错误)等更改的Laravel护照/ OAuth的服务器响应

我已经改变了\Illuminate\Auth\AuthenticationException的响应抛出,以适应我的应用程序的其它部分,但是我不确定如何更改各种令牌授予响应的响应,而不会像编辑供应商文件那样做一些可怕的事情。

+0

这个问题可以利用一些环境和更好的问题,唯一类似它是'但是我不知道如何改变各种代金券授予responses'的响应。还提供一些代码。 –

回答

1

我认为你可以使用中间件来改变你的回应。

从laravel文档:

&之前之后中间件

无论中间件之前或之后 请求依赖于中间件本身运行。

您可以捕获响应和重新格式化的响应。

您可以使用laravel的setContent方法设置响应的内容。 Check here

+0

我以为你可以用中间件来做,但不知道如何开始。这很好,谢谢。 –

+0

你应该得到赏金,出于某种原因,我不知何故把它给了错误的人。不知道是否有办法移动它... –

+0

谢谢你。并没有问题的赏金。我们在这里帮助社区。这就是我们的成长。让我们知道结果。 –

2

你正在尝试做的,是不是库支持,所以无论你做什么会哈克并可能会打破与laravel/passport未来版本的兼容性。

在我看来,你可以只2个选项中进行选择:

  1. ,而不用声明护照路线(Passport::routes()),你可以等价路由申报您的自定义方法。这些方法在内部调用Passport类和方法,在将它们返回给用户之前处理护照返回值。它需要大量的关于护照代码的挖掘,但同时,如果您只添加一些字段(successerror),那么在更新库时应该能够在不费力的情况下更新代码。

  2. laravel/passport并对其进行修改,以满足您的需要。这个解决方案不会像第一个那样混乱,但是与未来护照的新版本合并可能会很困难。

当然,两者都不是很大的解决方案。保持标准的护照回复或使用更合适的图书馆是更好的选择:如果你问,我认为他们不可行。

+0

这是一种痛苦。我想到的两种选择,我只是希望有一个更好的方法。目前,我有我自己的路由里面做他们需要发放访问令牌等等做什么我希望能够挂钩某些东西,或者添加一些中间件来调整响应。 –

+0

@gbalduzzi是对的。修改你的js函数来检查是否有成功响应。检查响应中是否存在成功变量**或** expires_in'属性。 – piotr

-1

另一种方式 - 为您的目的创建代理路由。

Route::post('custom-auth/token', function (Request $request) { 
    $proxy = Request::create('oauth/token', 'POST', $request->request->input()); 

    $response = app()->handle($proxy); 

    return responseCallback($response); 
}); 

其中responseCallback您的自定义响应变性功能。

+0

我偶然给了你赏金,但我不会建议这样做,因为它有相当多的开销。 –

+0

@DanielDewhurst,是的。请注意,如果您将使用“中间件”解决方案并覆盖“OAuth”路由请求/响应格式,则会导致与第三方客户端不兼容,因为他们会期望原始的“OAuth”请求/响应格式。 – tooleks