【问题标题】:What is the correct way to redirect a request in middleware?在中间件中重定向请求的正确方法是什么?
【发布时间】:2015-10-12 14:35:09
【问题描述】:

我正在尝试将著名的improved persistent session 实现为 Slim 微框架中的中间件。

在所描述的算法中有一些地方,应用程序应该检查用户的 cookie 并在用户的 cookie 过期或无效时重定向用户。不幸的是,不可能从中间件中重定向用户,原因有两个:

  1. Slim 的redirect 只能在命名路由中使用;
  2. 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


    【解决方案1】:

    您在上面列出的是一种非常好的方法,并且通常是如何完成的。假设您的登录页面没有检查 HttpUnauthorizedExcepion,那么它就不可能重定向循环。

    【讨论】:

    猜你喜欢
    • 2020-05-09
    • 2010-10-23
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    相关资源
    最近更新 更多