当Symfony中的会话超时时缓存其他操作的登录模板

问题描述:

我正在使用Symfony 1.4和sfGuardDoctrinePlugin。问题是:当Symfony中的会话超时时缓存其他操作的登录模板

  • 让我们说当前网页的网址是www.pg.com/blog/edit.php
  • 现在会话超时的,我点击博客指数环
  • 这重定向到www.pg.com/blog,但由于我需要登录,login_module和login_action的模板在同一个URL上(www.pg.com/blog)
  • 登录后,用户被带到博客索引(或者即使用户点击了该链接),登录模板也会被缓存用于“博客/索引”。

我怀疑在sfAuth插件的某个地方,有一个转发而不是在其他页面URL上提供登录模板的重定向。 我该如何预防?

编辑:我甚至找到了它发生的地方,但我不想修改Symfony源代码。我可以在外面做吗?

Jul 31 10:02:59 symfony [info] {sfBasicSecurityFilter} Action "blog/index" requires authentication, forwarding to "sfGuardAuth/signin" 

用户必须等待相当长的一段时间或清除缓存才能避免这种情况。 谢谢

转发由sfBasicSecurityFilter过滤器完成。如果你想向前更改为重定向,你将不得不覆盖forwardToLoginAction在自己的保安过滤器:

class mySecurityFilter extends sfBasicSecurityFilter 
{ 

    protected function forwardToLoginAction() 
    { 
     $this->getContext()->getController()->redirect(sfConfig::get('sf_login_module') . '/' . sfConfig::get('sf_login_action')); 
     throw new sfStopException(); 
    } 
} 
+0

感谢,看起来像它会工作 - 我会尽快尝试。我可能会在这里变得有点贪婪:但是您是否想出了一种方法来保留引用链接,并在登录后将用户返回到那里?通过查询参数? – Prasad 2012-07-31 15:30:35

+1

如果你没有在config.yml中为'sf_guard_plugin_success_signin_url'指定一个值,sfGuardDoctrinePlugin查看引用者在登录后重定向用户,所以你不必做任何事情;) – 2012-07-31 17:28:06

+0

感谢一吨;将验证并接受明天;今天很少被绑起来 – Prasad 2012-08-01 05:04:12