2016-08-20 1 views
0

Laravel REST API에 Tymon/JWT-Auth 패키지를 사용하고 있습니다. 내 routes.php 파일에서 인증되지 않은 사용자를위한 경로와 인증 된 사용자의 경로를 추가 할 수 있습니다.Laravel JWT 인증을 사용하여 모든 사용자가 경로에 액세스하도록 허용하는 방법은 무엇입니까?

인증되지 않은 사용자의 경로는 인증 헤더를 무시합니다. 그러나 헤더가 유효하면 권한이 부여 된 사용자 데이터를 활용할 수있는 라우트 그룹을 지정하고 설정되지 않았거나 유효하지 않은 경우 다른 작업을 수행합니다.

이러한 기능을 구현하는 방법은 없나요? 아니면 JWTAuth 패키지의 미들웨어에 해결책이 있습니까?

답변

0

이 딜레마를 해결하기 위해 JWTAuth GetUserFromToken 미들웨어를 기반으로하는 자체 미들웨어를 만들었고이를 커널 파일의 routeMiddleware 배열에 추가했습니다.

<?php 

namespace App\Http\Middleware; 

use Tymon\JWTAuth\Exceptions\JWTException; 
use Tymon\JWTAuth\Exceptions\TokenExpiredException; 

class NeutralRoute extends \Tymon\JWTAuth\Middleware\BaseMiddleware 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, \Closure $next) 
    { 
     $token = $this->auth->setRequest($request)->getToken(); 

     if($token){ 
      try { 
       $user = $this->auth->authenticate($token); 
      } catch (TokenExpiredException $e) { 
       return $this->respond('tymon.jwt.expired', 'token_expired', $e->getStatusCode(), [$e]); 
      } catch (JWTException $e) { 
       return $this->respond('tymon.jwt.invalid', 'token_invalid', $e->getStatusCode(), [$e]); 
      } 
      if($user){ 
       $this->events->fire('tymon.jwt.valid', $user); 
      } 
     } 

     return $next($request); 
    } 
} 
을 RouteMiddleware