2016-11-02 29 views
4

私はjwt(jwt-authを使用)でLaravelを設定しました。私のKernel.phpで - $ routeMiddleware私が追加しました:Laravelとjwt-auth - ユーザーがログインしているかどうかを確認する方法

'jwt.auth' => \Tymon\JWTAuth\Middleware\GetUserFromToken::class, 
'jwt.refresh' => \Tymon\JWTAuth\Middleware\RefreshToken::class 

私は自動的に要求ごとにユーザーの新しいトークンを作成/更新されます「jwt.refresh」それを理解しています。

public function isAuthenticated() { 
    $token = JWTAuth::getToken(); 
    if(!$token){ 
     throw new JWTException('Token not provided'); 
    } 
    try{ 
     $token = JWTAuth::refresh($token); 
    }catch(TokenInvalidException $e){ 
     throw new AccessDeniedHttpException('The token is invalid'); 
    } 
    return $this->response->withArray(['token'=>$token]); 
    } 

問題がにisAuthenticated()がJWTAuth呼び出されたときにということである:私は、ユーザーがそのように私は、この関数を呼び出して、ルートを追加したログインしているかどうかを確認する必要があり、私の単一ページのAjaxアプリで

:: refresh($ token)呼び出しが失敗します。

トークンがリフレッシュされることとは関係があります。

私がしたいのは、クライアントのトークンが有効であれば真を返すことです。 これを行う方法はありますか?

'jwt-refresh'を削除しても問題は解決しないようです。

ありがとうございます!

答えて

2

私の最初の観察は、トークンはどこに保存されていますか?それは要求と解析されていますか?私はあなたのアプリケーションがAPIを使用してJWTを使用する場合、各要求は、ログインしているユーザーを意味するトークンを持つべきであると信じているのでので、このようなものが参考になる:

try { 
     if (! $token = JWTAuth::parseToken()) { 
      //throw an exception 
     } 
    } catch (Exception $e) { 
     if ($e instanceof \Tymon\JWTAuth\Exceptions\TokenInvalidException){ 
          //throw an exception 
     }else if ($e instanceof \Tymon\JWTAuth\Exceptions\TokenExpiredException){ 
          //throw an exception 
     } else if ($e instanceof \Tymon\JWTAuth\Exceptions\JWTException) { 
          //throw an exception 
     }else{ 
          //throw an exception 
     } 
    } 

に成功要求から解析された場合には、:

$user = JWTAuth::toUser($token); 

参照:トークンが設定されていない場合、あなたのコード例ではhttps://github.com/tymondesigns/jwt-auth/wiki/Authentication

、 - 何も取得されません。ただし、セッションベースの認証が必要な場合は、Laravelの既定の認証を使用しないでください。

希望します。

関連する問題