1

我正在使用 Symfony 1.2.7 和 sfGuardUser 插件。我能够查看所有页面,登录和注销。但是,当我尝试编辑(只是转到表单)或更新对象(保存更改)时,有时我会遇到身份验证问题,并且 symfony 会再次将我重定向到编辑表单页面。有时我会强调一些,因为这让我发疯:)

用户有 cookie 和 remember_cookie。我对两个 cookie 都使用 cookie 域“.domain.com”,因为我们使用子域。

在 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();
  }
}

在模块/config/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"

关于我可以在哪里继续寻找或如何修复它的任何想法?

非常感谢!

4

2 回答 2

1

嘿,我在 symfony 1.4 上遇到了非常相似的问题。

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

显然他们弄乱了会话路径,所以我的一些请求发送到不知道会话是什么样的服务器-那些将我重定向到登录屏幕-原始服务器具有正确的会话路径,因此当他们为我提供服务时请求,事情将再次正常运行。干杯,

于 2010-12-24T00:32:51.693 回答
0

fixed, it was a problem of having two servers running at the same time. We have changed to use Memcache for cookie storing.

于 2010-07-09T11:03:58.850 回答