【发布时间】:2015-10-12 14:35:09
【问题描述】:
我正在尝试将著名的improved persistent session 实现为 Slim 微框架中的中间件。
在所描述的算法中有一些地方,应用程序应该检查用户的 cookie 并在用户的 cookie 过期或无效时重定向用户。不幸的是,不可能从中间件中重定向用户,原因有两个:
- Slim 的
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');
}
...
});
但我不确定这是不是最好的方法。我还有其他方法可以做到这一点吗?
【问题讨论】:
标签: php redirect infinite-loop middleware slim