更改Laravel Passport / OAuth-Server响应

时间:2017-07-11 09:32:57

标签: laravel laravel-5 oauth laravel-5.4 laravel-passport

我正在使用Laravel Passport 3进行身份验证,在Laravel 5.4中构建API。我的所有API方法都返回一组始终返回的值,successerrors(如果有任何错误)等。

我已经改变了\Illuminate\Auth\AuthenticationException投掷的响应,以适应我的应用程序的其余部分,但是我不知道如何更改各种令牌授权响应的响应,而不会做像编辑这样糟糕的事情供应商文件。

3 个答案:

答案 0 :(得分:2)

图书馆不支持您在此处尝试做的事情,因此无论您做什么都会很糟糕,并且可能会破坏与laravel/passport未来版本的兼容性。

在我看来,你只能在这两个选项中进行选择:

  1. 您可以声明等效路线到自定义方法,而不是声明护照路线(Passport::routes())。这些方法在内部调用Passport类和方法,在将它们返回给用户之前处理护照返回值。它需要大量挖掘护照代码,但同时,如果您只添加一些字段(successerror),您应该能够在更新时更新代码而无需太多工作库。

  2. 分叉laravel/passport并根据您的需要进行修改。这个解决方案并不像第一个那样凌乱,但未来合并新版护照可能会很难。

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

答案 1 :(得分:2)

我认为您可以使用中间件来更改您的响应。

来自laravel文档:

  

之前&在中间件之后

     

中间件是在之前还是之后运行   请求取决于中间件本身。

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

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

答案 2 :(得分:-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您的自定义响应修改器功能。