2017-02-21 3 views
2

나는 직면하고 있습니다 "Laravel의 JWT에서" 오류로 인해 토큰을 구문 분석 할 수 없습니다."토큰을 요청에서 구문 분석하지 못했습니다."laravel의

localhost (Windows 7의 Xampp)에서 동일한 코드를 시도했지만 작동하지만 서버에서는 작동하지 않습니다.

"승인" 토큰을 헤더에 전달했으며 또한 .htaccess 파일을 변경했습니다.

다음은 htaccess로 파일입니다

enter image description here

2. 각 에 요청에서 전달 토큰 아래 스크린 샷 확인하시기 바랍니다.

<IfModule mod_rewrite.c> 
<IfModule mod_negotiation.c> 
Options -MultiViews 
</IfModule> 

RewriteEngine On 

# Redirect Trailing Slashes If Not A Folder... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

# Handle Front Controller... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+)$ /index.php/$1 [L] 

RewriteCond %{HTTP:Authorization} ^(.*) 
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1] 
</IfModule> 

(나는 또한 루트 htaccess로 파일과 공공의 .htaccess 파일 모두에서이 코드를 시도했다) 그리고이 인증 토큰 코드 아래 사용했다.

: 시간을 절약해야하는 경우 때문에 아파치로 Authorization 헤더의 문제가 배제
public function image_upload(Request $request){ 
    try{ 
     if($user = JWTAuth::parseToken()->authenticate()){ 
      \Api::success(['data' => $user]); 
     }else{ 
      \Api::error("User is not found."); 
     } 
    } 
    catch(\Tymon\JWTAuth\Exceptions\TokenExpiredException $e){ 
     \Api::error(['type'=> 'expired','message' => 'Your login has been expired. Please login and try again.']); 
     exit(); 
    } 
    catch(\Tymon\JWTAuth\Exceptions\TokenInvalidException $e){ 
     \Api::error(['type'=> 'invalid','message' => $e->getMessage()]); 
     exit(); 
    } 
    catch(\Tymon\JWTAuth\Exceptions\JWTException $e){ 
     \Api::error(['type'=> 'invalid','message' => $e->getMessage()]); 
     exit(); 
    } 
} 
+0

'$ request-> bearerToken()'을 돌려보고 그것을 가질 수 있는지 알아 볼 수 있습니까? –

+0

또한 문제는 여기에 귀하의 사례와 관련이 있다고 명시되어 있습니까? https://github.com/tymondesigns/jwt-auth/issues/786 즉'''# Handle Authorization Header RewriteCond % {HTTP : Authorization}입니다. RewriteRule. * - [E = HTTP_AUTHORIZATION : % {HTTP : Authorization}] –

+0

$ request-> bearerToken()이 * NULL * 값을 반환하려고 시도했습니다 ** –

답변

3

는, 당신은 당신이 토큰을 가지고 있는지 확인, 컨트롤러에서 다음, 귀하의 요청에 토큰을 전달할 수 있습니다
public function image_upload(Request $request){ 
    return $request->token; 
..... 
} 

결과가 있습니까? 그렇지 않으면 요청 매개 변수에 token 필드가 있는지 확인해야합니다. 이 컨트롤러의 토큰을 가지고 있다면, 당신은 여전히 ​​사용 (어쩌면 목적을 디버깅) 단순히 parseToken() 방법 또는를 사용할 수 있습니다

public function image_upload(Request $request){ 
    $user = JWTAuth::toUser($request->token)); 
    ....... 
} 

내가이 충분해야한다고 생각 유일한 실수는 당신이 적용했는지 수 있습니다 middleware은 액세스중인 경로에서이 문제를 일으켰습니다.

PS : 나는이 도움이 되었으면 좋겠

*

Laravel 5.2에서이 작업을 시도했다.

+1

감사합니다. 작동 중입니다. –

관련 문제