簡體   English   中英

如何在laravel的多重身份驗證中撤銷令牌?

[英]How can revoke token in multi authenticate in 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

一旦您調用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();
}

如下使用並檢查它您錯過了 $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();
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM