Я пытаюсь реализовать (в) знаменитый улучшенный постоянный сеанс в качестве промежуточного ПО в микрорамках Slim.
В описанном алгоритме есть несколько мест, где приложение должно проверять куки пользователя и перенаправлять пользователя, если их куки истекли или являются недействительными. К сожалению, невозможно перенаправить пользователя из промежуточного ПО по двум причинам:
redirect
может использоваться только внутри именованных маршрутов;redirect
создаст совершенно новый запрос, перезапустив приложение Slim. Те же условия, которые вызывали перенаправление, будут сработать повторно, создавая таким образом бесконечный цикл.Проблема 1 может быть решена с умным использованием хуков, но я не уверен, что делать с проблемой 2. Я замечаю, что некоторое промежуточное ПО решает это с помощью пользовательского исключения, которое затем перехватывается с помощью обработчика ошибок Slim, а затем вызывает редирект:
// Handle the possible 403 the middleware can throw
$app->error(function (\Exception $e) use ($app) {
...
if ($e instanceof HttpUnauthorizedException) {
return $app->redirectTo('login');
}
...
});
Но я не уверен, что это лучший способ сделать это. Есть ли другие способы, которыми я могу это сделать?
То, что вы перечислили выше, является прекрасным способом сделать это, и, как правило, как это делается. Предполагая, что ваша страница входа не проверяет HttpUnauthorizedExcepion, не было бы способа перенаправить цикл.
Других решений пока нет …