Тонкий каркас промежуточного программного обеспечения JWT Выпуск

У меня проблема с моим тонким приложением, я пытаюсь использовать JsonWebToken для аутентификации, но я не знаю, как сделать это правильно.

Мое промежуточное программное обеспечение блокирует все запросы, которые не содержат действительный токен, но как насчет первого пост-запроса аутентификации, который явно не содержит действительный токен.
Вот мой код, если он помогает (в файле промежуточного программного обеспечения):

$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

Решение

Вы можете проверить, какой маршрут вызывается в промежуточном программном обеспечении, а затем не проверять, является ли токен текущего маршрута фактическим маршрутом входа в систему.

Чтобы получить маршрут внутри промежуточного программного обеспечения, вам необходимо сначала настроить slim для определения маршрута до запуска промежуточного программного обеспечения:

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');
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]