2016-11-02 1 views
4

jwt (jwt-auth 사용)로 Laravel을 설정했습니다. 내 Kernel.php에서 - $ routeMiddleware 내가 추가 한 :Laravel 및 jwt-auth - 사용자가 로그인했는지 확인하는 방법

나는 그것이 'jwt.refresh'자동/새로 고침 각 요청에 대해 사용자에 대한 새 토큰을 생성합니다 알고있는 것처럼
'jwt.auth' => \Tymon\JWTAuth\Middleware\GetUserFromToken::class, 
'jwt.refresh' => \Tymon\JWTAuth\Middleware\RefreshToken::class 

. 내 단일 페이지 아약스 응용 프로그램에서

나는 사용자가 너무 로그인되어 있다면이 함수를 호출 경로 추가 확인해야합니다

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를 호출 할 때 :: 새로 고침 ($ 토큰) 호출이 실패합니다.

토큰이 새로 고쳐지는 것과 관련이 있다고 생각합니다.

내가 원하는 것은 클라이언트 토큰이 유효하면 true를 반환하는 것입니다. 이렇게하는 방법이 있습니까?

'jwt-refresh'를 제거해도 문제가 해결되지 않는 것 같습니다.

미리 감사드립니다.

답변

2

내 첫 번째 관찰은, 토큰이 어디에 저장 되었습니까? 요청과 파싱 되었습니까? 다음 성공적으로 요청에서 구문 분석 된 경우

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 
     } 
    } 

, :

나는 앱이 API를 사용하여 JWT를 사용하는 경우, 각 요청이 같은 것이 도움이 될 것 있도록 사용자 로그인 의미하는 토큰을해야한다고 생각하기 때문에
$user = JWTAuth::toUser($token); 

참조 : 토큰이 설정되지 않은 경우 귀하의 예제 코드와 https://github.com/tymondesigns/jwt-auth/wiki/Authentication

, - 아무 것도 검색되지 않습니다. 그러나 세션 기반 인증을 원할 경우 Laravel의 기본 인증을 사용하지 않는 것이 좋습니다.

희망이 도움이됩니다.

관련 문제