【问题标题】:Laravel sanctum SPA authentication logout is not workingLaravel sanctum SPA 身份验证注销不起作用
【发布时间】:2022-01-22 14:41:25
【问题描述】:

我在我的 Vue 项目中使用 laravel sanctum SPA 身份验证。一切正常,但即使在注销后也是如此

Auth::logout()

我仍然能够从中间件中的 api 路由获取数据

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

注销后我应该无法获取数据。它应该显示 401 unauthenticated 但事实并非如此。 如何解决这个问题。我在这里卡了 3 天。我也跟着 laravel 文档和其他教程,但是每个人都像我一样注销。

【问题讨论】:

  • sanctum 是默认守卫吗?
  • 以上路由是用 api.php 写的,所以默认的守卫是 api @lagbox
  • 默认保护设置在配置auth.php ...使用身份验证功能时,如果您没有传递保护,它将使用默认保护...如果默认值不是sanctum 那么你可能在不同的警卫上调用logout
  • 好的,那么你的意思是我应该在注销时通过圣所守卫?
  • 您的问题解决了吗?我有同样的问题,邮递员一切正常,但即使我通过邮递员撤销令牌,vue 也会让我保持登录状态

标签: laravel vue.js single-page-application laravel-sanctum


【解决方案1】:

请使用Auth::guard('web')->logout(); 而不是Auth::logout()。查看SPA Log out issue

【讨论】:

    【解决方案2】:

    要注销,用户只需在您的注销功能中执行此操作即可删除所有用户令牌

    public function logout(Request $request) {
    auth()->user()->tokens()->delete();
    }
    

    或者使用这个来仅删除活动令牌

    $request->user()->currentAccessToken()->delete();
    

    【讨论】:

      【解决方案3】:

      要注销特定用户,您需要指定用户。

      // Revoke a specific user token
      Auth::user()->tokens()->where('id', $id)->delete();
      
      // Get user who requested the logout
      $user = request()->user(); //or Auth::user()
      // Revoke current user token
      $user->tokens()->where('id', $user->currentAccessToken()->id)->delete()
      

      【讨论】:

      • 更干净的方式$request->user()->currentAccessToken()->delete();
      • 我使用的是 SPA 身份验证而不是 API 令牌身份验证。这个答案可能适合那个。无论如何感谢您的响应。
      猜你喜欢
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 2022-07-02
      • 2020-11-30
      • 2020-09-22
      • 2021-07-22
      • 2021-04-05
      相关资源
      最近更新 更多