Laravel 护照:auth:api 表现得像 auth:web

Laravel Passport: auth:api behaving like auth:web

我正在尝试在我的应用程序中实施 passport 以验证 api 调用。我已经按照官方文档中的说明进行了配置。 我的 auth guard 中有这个:

'api' => [
            'driver' => 'passport',
            'provider' => 'users',
        ],

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

Passport::routes();

这是我正在尝试访问的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');
});

我在这样的请求中发送 header

Authorization:Bearer $accessToken

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

我的laravel版本是5.4.33。

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

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

的路由,这显然会失败

当您发送 "X-Requested-With: XMLHttpRequest" header 或 "Accept: application/json" header 时,您的请求 "expectsJson"。否则视为正常的网络请求。

如果您想更改您的应用程序处理未经身份验证的用户的方式,unauthenticated() 方法就是要更改的方法。

在 postman 的 Headers 中添加此代码。

key           Value
Accept        application/json

谢谢