用户未经授权时的 Laravel 护照自定义错误消息和状态码
Posted
技术标签:
【中文标题】用户未经授权时的 Laravel 护照自定义错误消息和状态码【英文标题】:Laravel passport custom error message and status code when user unauthorized 【发布时间】:2018-06-09 21:20:45 【问题描述】:我的项目在Laravel 5.4
上运行,我使用passport
通过带有bearer token
的api 进行身份验证。一切正常,但是当未经授权的用户尝试访问需要身份验证的资源时,用户会收到错误消息405 method not allowed
但我希望回复为 401 unauthorized
。
如何改变这一点,只发送带有消息的响应,而不是异常?我做了研究,但找不到任何东西。我使用标准 laravel 中间件进行授权auth:api
。我的路由分组在中间件中
Route::group(['middleware' => 'auth:api'], function ()
// these routes should return 401 if user not authenticated
【问题讨论】:
【参考方案1】:发生方法不允许的异常是因为您访问了错误的端点。您正在发布到 get 或反之亦然。
但是,如果您转到 App\Exception
打开 handler.php in render()
方法,您可以修改您的异常,您可以根据需要调整异常,例如:
public function render($request, Exception $exception)
if ($exception instanceof \Illuminate\Auth\AuthenticationException)
return response('unauthorized', 401);
return parent::render($request, $exception);
在handler()
方法上,只需检查$exception
是否是任何异常对象的实例,如果是,您可以根据需要修改响应。对于 laravel 异常,请关注link
【讨论】:
找不到可以处理的地方。谢谢!以上是关于用户未经授权时的 Laravel 护照自定义错误消息和状态码的主要内容,如果未能解决你的问题,请参考以下文章
使用 JWT 进行护照身份验证:如何将护照的默认未经授权响应更改为我的自定义响应?
Laravel 护照 oauth 路线总是返回 401 未经授权
在 Laravel 护照、vueJS 和 Axios 中获得未经授权的 401