2010-07-08 98 views
1

我使用的是Symfony 1.2.7和sfGuardUser插件。我可以查看所有页面,登录和注销。但是,当我尝试编辑(只是去表单)或更新对象(保存更改)有时我有auth问题,并且symfony再次将我重定向到编辑表单页面。我对有些强调,有时,因为这是它让我疯狂:)sfGuardUser中的认证问题(安全过滤器)Symfony

用户有cookies和remember_cookie。由于我们使用子域名,因此我将cookie域名“.domain.com”用于这两个Cookie。

在filters.yml我有以下:

security: ~ 

remember: 
    class: sfGuardBasicSecurityFilter 

该过滤器是由所使用的许多之一:

class sfGuardBasicSecurityFilter extends sfFilter 
{ 
    public function execute ($filterChain) 
    { 
    if ($this->isFirstCall() && !$this->getContext()->getUser()->isAuthenticated()) 
    { 
     if ($cookie = $this->getContext()->getRequest()->getCookie(sfConfig::get('app_sf_guard_plugin_remember_cookie_name', 'sfRemember'))) 
     { 
     $q = Doctrine_Query::create() 
       ->from('sfGuardRememberKey r') 
       ->innerJoin('r.sfGuardUser u') 
       ->where('r.remember_key = ?', $cookie); 

     if ($q->count()) 
     { 
      $this->getContext()->getUser()->signIn($q->fetchOne()->sfGuardUser); 
     } 
     } 
    } 

    $filterChain->execute(); 
    } 
} 

在模块/配置/ security.yml

edit: 
    is_secure: on 

update: 
    is_secure: on 

看看http标题,它会让我回到HTTP 302的答案。如果我看看引发重定向的代码;我注意到,好像只是编辑或更新操作不承认用户之前:

Jul 08 19:03:15 symfony [info] {sfFilterChain} Executing filter "sfBasicSecurityFilter" 
Jul 08 19:03:15 symfony [info] {sfFilterChain} Executing filter "sfRenderingFilter" 
Jul 08 19:03:15 symfony [info] {sfFilterChain} Executing filter "sfGuardBasicSecurityFilter" 
Jul 08 19:03:15 symfony [info] {sfDoctrineLogger} executeQuery : SELECT COUNT(*) AS num_results FROM (SELECT s.id, s.ip_address FROM sf_guard_remember_key s ... 
Jul 08 19:03:16 symfony [info] {sfDoctrineLogger} executeQuery : SELECT s.id AS s__id, s.user_id AS s__user_id, s.remember_key AS s__remember_key, s.ip_address ... 
Jul 08 19:03:16 symfony [info] {myUser} User is authenticated 
Jul 08 19:03:16 symfony [info] {sfDoctrineLogger} executeQuery : SELECT s.id AS s__id, s.name AS s__name, s.description AS s__description, s.created_at AS .... 
Jul 08 19:03:16 symfony [info] {sfDoctrineLogger} executeQuery : SELECT s.id AS s__id, s.name AS s__name, s.description AS s__description, s.created_at AS .... 
Jul 08 19:03:16 symfony [info] {myUser} Add credential(s) "" 
Jul 08 19:03:16 symfony [info] {sfDoctrineLogger} executeQuery : UPDATE sf_guard_user SET last_login = ?, updated_at = ? WHERE id = ? - (... 
Jul 08 19:03:16 symfony [info] {sfFilterChain} Executing filter "subdomainFilter" 

在哪里可以继续寻找或如何解决它的主意?

非常感谢!

+0

嘿fesja,你如何改变sfguard cookie的域名?请参阅此线程上的问题:http://stackoverflow.com/questions/19452914/symfony-sfguarduser-single-authentication-on-several-subdomains – flm 2013-10-18 15:06:13

回答

0

固定,这是两台服务器同时运行的问题。我们更改为使用Memcache进行cookie存储。

1

嘿,我在symfony 1.4上遇到了非常类似的东西。

基本上发生了什么事情,我会登录到我的应用程序,然后突然重新定向到登录页面,当我试图与页面交互。这真的很奇怪,因为在我的开发机器上,事情工作正常。在主机服务器上,我的代码会将我登录,然后如果我刷新页面或尝试执行任何操作,我将被重定向到登录屏幕。刷新几次使我试图达到的资源弹出并消失。这是非常奇怪的,没有任何模式,直到我看完你的帖子,我都弄不明白。然后,我打电话给我的托管公司,看看他们是否在做某种负载平衡,以及他们是否在服务器之间正确共享会话信息。

显然他们搞砸了会话路径,所以我的一些请求去了服务器,它们不知道会话是什么样的 - 这些将服务器重定向到登录屏幕 - 原始服务器有适当的会话路径,所以当他们会服务我的请求,事情会再次正常。 干杯,