更改 Laravel Passport/OAuth-Server 响应

Changing The Laravel Passport/OAuth-Server Responses

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

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

库不支持您在此处尝试执行的操作,因此无论您做什么都是 hacky,并且可能会破坏与 laravel/passport.

未来版本的兼容性

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

  1. 您可以声明与您的自定义方法等效的路由,而不是声明护照路由 (Passport::routes())。这些方法在内部调用 Passport 类 和方法,在将它们返回给用户之前处理护照返回值。它需要深入挖掘护照代码,但与此同时,如果您只添加一些字段(successerror),您应该能够在更新图书馆.

  2. 派生 laravel/passport 并根据您的需要进行修改。这个解决方案不像第一个那样混乱,但将来与新版本的护照合并可能会很困难。

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

我想你可以使用中间件来改变你的反应。

来自 laravel 文档:

Before & After Middleware

Whether a middleware runs before or after a request depends on the middleware itself.

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

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

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

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 您的自定义响应修饰符函数。