Laravel Passport:auth:api表现得像auth:web

Saa*_*ani 3 php authentication access-token laravel laravel-passport

我试图passport在我的应用程序中实现验证api调用.我已经完成了官方文档中提到的配置.我在我的认证中有这个:

'api' => [
            'driver' => 'passport',
            'provider' => 'users',
        ],
Run Code Online (Sandbox Code Playgroud)

而且,这在我的AuthServiceProvider's boot()方法中:

Passport::routes();
Run Code Online (Sandbox Code Playgroud)

这就是route我想要访问的内容:

    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');
});
Run Code Online (Sandbox Code Playgroud)

我发送的header请求是这样的:

Authorization:Bearer $accessToken
Run Code Online (Sandbox Code Playgroud)

我的问题是:1.当请求受保护的路由时,它会将我发送到登录页面,但我希望它返回401.我该怎么做?

我的laravel版本是5.4.33.

pat*_*cus 6

身份验证失败时,Laravel会抛出AuthenticationException异常.此异常由Laravel异常处理程序处理,并最终调用文件中的unauthenticated()方法app/Exceptions/Handler.php.

您可以从该方法中看到,如果您的请求需要json响应,您将获得401 Unauthenticated响应.但是,如果您不期望json响应,它只会重定向到名为"login"的路由.如果您没有名为"login"的路由,这显然会失败.

当您发送"X-Requested-With:XMLHttpRequest"标头或"Accept:application/json"标头时,您的请求"expectedJson".否则,它被视为普通的Web请求.

如果您想更改应用程序处理未经身份验证的用户的unauthenticated()方式,则可以更改该方法.