php – Laravel Passport:auth:api表现得像auth:web
作者:互联网
我正在尝试在我的应用程序中实现护照以验证api调用.我已经完成了官方文档中提到的配置.
我在我的认证中有这个:
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
而且,这在我的AuthServiceProvider的boot()方法中:
Passport::routes();
这是我试图访问的路线:
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
Route::group(['namespace' => 'Api', 'middleware' => 'auth:api'], function () {
// Login Controller
Route::get('/getclc', 'PreController@getClc');
});
我在请求中发送标题,如下所示:
Authorization:Bearer $accessToken
我的问题是:1.当请求受保护的路由时,它会将我发送到登录页面,但我希望它返回401.我该怎么做?
我的laravel版本是5.4.33.
解决方法:
身份验证失败时,Laravel会抛出AuthenticationException异常.此异常由Laravel异常处理程序处理,并最终在app / Exceptions / Handler.php文件中调用unauthenticated()方法.
您可以从该方法中看到,如果您的请求需要json响应,您将获得401 Unauthenticated响应.但是,如果您不期望json响应,它只会重定向到名为“login”的路由.如果您没有名为“login”的路由,这显然会失败.
当您发送“X-Requested-With:XMLHttpRequest”标头或“Accept:application / json”标头时,您的请求“expectedJson”.否则,它被视为普通的Web请求.
如果您想更改应用程序处理未经身份验证的用户的方式,则需要更改unauthenticated()方法.
标签:php,laravel,authentication,access-token,laravel-passport 来源: https://codeday.me/bug/20190828/1750708.html