проблемы с авторизацией (фильтры безопасности) в sfGuardUser Symfony

Я использую Symfony 1.2.7 и плагин sfGuardUser. Я могу просматривать все страницы, входить и выходить. Однако, когда я пытаюсь отредактировать (просто переходя в форму) или обновить объект (сохраняя изменения), иногда у меня возникают проблемы с авторизацией, и symfony снова перенаправляет меня на страницу редактирования формы. Я делаю акцент на иногда, потому что это сводит меня с ума :)

У пользователей есть файлы cookie и файл Remember_cookie. Я использую домен cookie «.domain.com» для обоих файлов cookie, потому что мы работаем с поддоменами.

На filter.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"

Любая идея о том, где я могу продолжать искать или как я могу это исправить?

Большое спасибо!


person fesja    schedule 08.07.2010    source источник
comment
Привет, Феся, как изменить домен cookie sfguard? Пожалуйста, посмотрите вопрос в этой ветке: stackoverflow.com/questions/19452914/   -  person flm    schedule 18.10.2013


Ответы (2)


Эй, я страдал от чего-то очень похожего на symfony 1.4.

В основном то, что происходило, заключалось в том, что я входил в свое приложение, а затем внезапно снова перенаправлялся на страницу входа, когда пытался взаимодействовать со страницей. Это было действительно странно, потому что на моей машине все работало нормально. На хост-сервере мой код регистрировал меня, а затем, если я обновлял страницу или пытался выполнить какое-либо действие, меня перенаправляли на экран входа в систему. При обновлении пару раз ресурс, к которому я пытался добраться, то всплывал, то исчезал. Это было очень странно, и не было никакой закономерности, я не мог понять это, пока не прочитал ваш пост. Затем я позвонил в свою хостинговую компанию, чтобы узнать, выполняют ли они какую-либо балансировку нагрузки и правильно ли распределяют информацию о сеансе между серверами.

По-видимому, они перепутали путь сеанса, и поэтому некоторые из моих запросов направлялись на серверы, которые понятия не имели, на что похож сеанс, — они перенаправляли меня на экран входа в систему — исходные серверы имели правильный путь сеанса, поэтому, когда они обслуживали мой запросы, все снова будет нормально. Ваше здоровье,

person dimo    schedule 24.12.2010

исправлено, это была проблема одновременного запуска двух серверов. Мы изменили использование Memcache для хранения файлов cookie.

person fesja    schedule 09.07.2010