我正在尝试在Slim微框架中将(in)着名的improved persistent session实现为中间件。
在算法描述的某些地方,应用程序应检查用户的cookie,并在用户的cookie已过期或无效时重定向用户。不幸的是,由于两个原因,不可能从中间件中重定向用户:
redirect
只能在命名路线中使用; redirect
将创建一个全新的请求,从而重新启动Slim应用程序。之前触发重定向的相同条件将被重新触发,从而创建无限循环。问题1可以通过巧妙地使用钩子来解决,但我不知道如何解决问题2.我注意到some middleware通过使用自定义异常解决了这个问题,然后他们用Slim的错误处理程序捕获,然后调用重定向:
// Handle the possible 403 the middleware can throw
$app->error(function (\Exception $e) use ($app) {
...
if ($e instanceof HttpUnauthorizedException) {
return $app->redirectTo('login');
}
...
});
但我不确定这是最好的方法。还有其他方法可以实现这个目标吗?
答案 0 :(得分:1)
上面列出的内容是一种完美的方式,通常是如何完成的。假设您的登录页面没有检查HttpUnauthorizedExcepion,那么就无法重定向循环。