1

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

   '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
4

2 回答 2

0

像下面这样使用并检查它你错过了 $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();
  }
于 2018-10-16T11:54:25.617 回答
0

一旦您打电话Auth::guard('admin-web')->logout(),您将无法从请求中检索用户。您必须在注销用户之前检索令牌:

public function logout(Request $request)
{
      $value = $request->bearerToken();
      $id = (new Parser())->parse($value)->getHeader('jti');
      $token = $request->user('admin-web')->tokens->find($id);
      Auth::guard('admin-web')->logout();
}
于 2018-10-16T08:25:03.563 回答