Slim JWT Middleware - Вызвать следующее промежуточное ПО при ошибке - PullRequest
0 голосов
/ 16 апреля 2019

Я использую https://github.com/tuupola/slim-jwt-auth slim middleware для аутентификации в приложении, над которым я работаю.У меня есть два промежуточных ПО, которые я использую для аутентификации на основе того, как осуществляется доступ к приложению.Я хочу запустить обе части на уровне приложения и на основе набора переменных после того, как промежуточное ПО определит, действительна ли аутентификация.

Так что-то вроде этого: (Middleware.php)

$container = $app->getContainer();

$userAuthMiddleware = new JwtAuthentication([
    'cookie' => $container->get('settings')['JWT']['cookieName'],
    'secret' => $container->get('settings')['JWT']['secret'],
    'secure' => $container->get('settings')['JWT']['secure'],
    'algorithm' => [JWT::HASH_ALGORITHM],
    'path' => ['/'],
    'passthrough' => [
        '/users/login',
        '/users/logout',
        '/users/reset-request',
        '/users/reset-password',
        '/leads/super'
    ],
    'relaxed' => ['localhost'],
    'error' => function(Request $request, Response $response, array $params) use ($container) {
       //Handle error here

    },
    'callback' => function(Request $request, Response $response, array $params) use ($container) {
        // attach the decoded token to the container
        $container['jwt'] = $params['decoded'];

        $container['user'] = UserHelper::getUser($container['jwt']->id, DaoFactory::getInstance()->user());
    }
]);

    // This should be the final piece of middleware that check if authentication is valid
    $authMiddleware = function($request, $response, $next) use ($container) {

    // $container['accessToken'] is in a 'AccessPoint' class
    if (!isset($container['user']) && !isset($container['accessToken']))
        return $response->withStatus(401)->withJson(GeneralErrors::response(GeneralErrors::UNAUTHORIZED));

};   

$app->add($authMiddleware)
        ->add($userAuthMiddleware)
        ->add(new \MyApp\Middleware\AccessPointMiddleware());

Моя проблема здесь в том, что JwtAuthentication вернет 401, если jwt недействителен без вызова следующей части промежуточного программного обеспечения.Я не могу найти способ вызвать следующий кусок промежуточного программного обеспечения $authMiddleware погода или нет JWT является действительным.

...