首页 > 解决方案 > 如何在 laravel 中撤销多重身份验证中的令牌?

问题描述

我写了一个登录方法,它奏效了。我的身份验证配置:

   'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'api' => [
            'driver' => 'passport',
            'provider' => 'users',
        ],
        'admin-web' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],
        'admin-api' => [
            'driver' => 'passport',
            'provider' => 'admins',
        ],
    ],

我写了一个注销方法,例如:

 public function logout(Request $request)
    {
        Auth::guard('admin-web')->logout();
        $value = $request->bearerToken();
        $id = (new Parser())->parse($value)->getHeader('jti');
        $token = $request->user()->tokens->find($id);
    }

但它无法在此列中找到标记:

    $token = $request->user()->tokens->find($id);

并引发错误:

Trying to get property 'tokens' of non-object

标签: phplaraveloauth-2.0revoke-token

解决方案


像下面这样使用并检查它你错过了 $id 参数。

 public function logout(Request $request,$id)
  {
  $value = $request->bearerToken();
  $id = (new Parser())->parse($value)->getHeader('jti');
  $token = $request->user('admin-web')->tokens->find($id);
  \Auth::guard('admin-web')->logout();
  }

推荐阅读