проблемы с аутентификацией (фильтры безопасности) в sfGuardUser Symfony - PullRequest
1 голос
/ 08 июля 2010

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

У пользователей есть куки-файлы и файл 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();
  }
}

О модуле / 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"

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

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

Ответы [ 2 ]

1 голос
/ 24 декабря 2010

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

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

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

0 голосов
/ 09 июля 2010

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

...