0

슬림 앱에 문제가 있습니다. 인증을 위해 JsonWebToken을 사용하려고하는데 올바른 방법으로 수행하는 방법을 모르겠습니다.슬림 프레임 워크 JWT 미들웨어 문제

내 미들웨어가 유효한 토큰을 포함하지 않는 요청을 모두 차단하지만 유효한 토큰을 포함하지 않는 첫 번째 인증 게시 요청은 어떻게 처리합니까? 이 (미들웨어 파일에) 도움이된다면 다음은 내 코드입니다 :

$app->add(function (Request $request,Response $response, $next) use ($app){ 
    $stringToken = $request->getHeader("Authorization")[0]; 
    if($stringToken == NULL) { 
     return $response->withJson(array("Connection"=>"Fail On Token", "Error"=>"No token Provided.")); 
    } else { 
     $jsonObjectToken = json_decode($stringToken); 
     try{ 
      JWT::decode($jsonObjectToken->jwt, JWTController::$secretKey, array('HS512')); 
     }catch (Exception $e){ 
      return $response->withJson(array("Connection"=>"Fail On Token", "Error"=>$e->getMessage())); 
     } 
     $response = $next($request, $response); 

     return $response; 
    } 
}); 
+0

저는 슬림형 3 – Meshredded

답변

2

당신은 미들웨어 내에서 호출 된 후 현재 경로의 토큰을 확인하지 않는 경로를 확인할 수는 실제 로그인 경로입니다.

:

use Slim\App; 

$app = new App([ 
    'settings' => [ 
     'determineRouteBeforeAppMiddleware' => true 
    ] 
]) 

는 그런 다음 미들웨어 내부 $route = $request->getAttribute('route');와 현재의 경로를 액세스 할 수 있습니다 미들웨어가 실행되기 전에 당신이 경로를 따지기에 슬림 구성 먼저 필요한 미들웨어 내부의 경로를 얻기 위해

현재 경로가 로그인 경로를

$app->add(function (Request $request, Response $response, callable $next) { 
    $route = $request->getAttribute('route'); 
    $name = $route->getName(); 

    if($name !== 'login') { 
     // do authentication 
    } 

    return $next($request, $response); 
}); 

참고 경우

이제 확인할 수 있습니다 : 당신의 이름을 설정해야 다음과 같은 경로에서 ->setName($name) 경로를 지정하세요.

$app->get('/login', function ($request, $response, $args) { 
    // do something 
})->setName('login'); 
관련 문제