【问题标题】:Laravel Passport: auth:api behaving like auth:webLaravel Passport:auth:api 的行为类似于 auth:web
【发布时间】:2018-02-01 22:57:01
【问题描述】:

我正在尝试在我的应用程序中实现passport 来验证api 调用。我已经完成了官方文档中提到的配置。 我的身份验证守卫中有这个:

'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. 当请求受保护的路由时,它会将我发送到登录页面,但我希望它返回 401。我该怎么做?

我的laravel 版本是 5.4.33。

【问题讨论】:

  • 你能告诉我们所有的路线吗?
  • @AntonisTsimourtos 我已经用所有路线更新了我的问题。请看一看。
  • 嗯,错误显然意味着“登录”路线没有定义。你可以尝试运行php artisan make:authto scaffold the authentication pages needed。然后你可以尝试使用php artisan clear:cache
  • 我按照你说的做了,现在它发送到登录页面而不是返回错误。
  • 所以“问题解决了”。现在你可能不得不考虑你想做什么?如果用户未通过身份验证,您是否要返回 401 或将他重定向到登录页面?您也可以更新您的问题。

标签: php laravel authentication access-token laravel-passport


【解决方案1】:

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

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

当您发送“X-Requested-With: XMLHttpRequest”标头或“Accept: application/json”标头时,您的请求“expectsJson”。否则,它被认为是一个正常的网络请求。

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

【讨论】:

    【解决方案2】:

    在邮递员的标头上添加此代码。

    key           Value
    Accept        application/json
    

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      相关资源
      最近更新 更多