【问题标题】:ERR_TOO_MANY_REDIRECTS + When redirecting anonymous userERR_TOO_MANY_REDIRECTS + 重定向匿名用户时
【发布时间】:2014-04-03 13:20:00
【问题描述】:

我正在使用 Silex(基于 Symfony2 的微框架)。

当会话过期(例如 2 小时没有活动)并且我刷新页面时,我总是收到错误消息,即他在 null 属性上找不到属性 displayName。因为在我的布局视图中,我有:
{{ app.user.displayName }}。 (这是合乎逻辑的)

现在我想在用户未登录时重定向到登录页面。我在$app->之前这样做:

$app->before(function (Request $request) use($app) {
    if ($request->getMethod() === "OPTIONS") {
        $response = new Response();
        $response->headers->set("Access-Control-Allow-Origin","*");
        $response->headers->set("Access-Control-Allow-Methods","GET,POST,PUT,DELETE,OPTIONS");
        $response->headers->set("Access-Control-Allow-Headers","Content-Type");
        $response->headers->set("Access-Control-Expose-Headers","handshake");
        $response->setStatusCode(200);
        $response->send();
    }

    if ($app['security']->isGranted('IS_AUTHENTICATED_ANONYMOUSLY')) {
        return $app->redirect('/login');
    }
});

但是当我这样做时,我总是得到错误:ERR_TOO_MANY_REDIRECTS。但是我该如何解决这个问题?

【问题讨论】:

  • 我不太了解 Silex 的工作原理,但如果所有请求都调用了 $app->before(),那么它也会调用 /login,并且由于不存在会话,@987654326 @ 进入重定向循环回到自身。您能否使用 Silex 推荐的任何方法将 return $app->redirect('/login') 包装在不针对 /login URI 执行的条件中?
  • 谢谢!检查是否在登录页面上!
  • 你应该在下面发布自己的解决方案作为答案。

标签: php symfony redirect silex


【解决方案1】:

创建了一个控件来检查您是否在登录页面上。如果不是 -> 重定向到登录页面。

if ($app['security']->isGranted('IS_AUTHENTICATED_ANONYMOUSLY')) {
    $routeName = $request->get('_route');
    if($routeName != 'user.login')
    {
        return $app->redirect('/');
    }
}

【讨论】:

    猜你喜欢
    • 2017-02-18
    • 2016-08-17
    • 2021-02-10
    • 2012-07-15
    • 2013-11-12
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多