sfDoctrineGuardPlugin забывает учетные данные после их проверки

Я ищу решение проблемы аутентификации. Я нашел только одного человека (в группе Google Symfony-users) с той же проблемой (№2 внизу) еще в мае прошлого года. Насколько я могу судить, решение не было опубликовано в списке.

В моей среде разработки под Mac OS X sfDoctrineGuardPlugin работает правильно. Когда я пытаюсь получить доступ к защищенной странице, меня перенаправляют на страницу входа. Когда я ввожу действительные учетные данные, меня перенаправляют обратно на первоначально запрошенную страницу.

В моей тестовой среде на DreamHost она не работает должным образом. Когда я пытаюсь получить доступ к защищенной странице, меня перенаправляют на страницу входа. Когда я ввожу действительные учетные данные, меня перенаправляют обратно на первоначально запрошенную страницу, но Symfony теряет мой статус аутентификации и (повторно) перенаправляет меня на вход в систему еще раз с очищенной формой. (Напротив, если я ввожу неверные учетные данные, я получаю сообщение об ошибке на странице входа в систему, и имя пользователя остается заполненным.)

В каждой среде Symfony проверяет, что мои учетные данные действительны, и что у меня есть права администратора, но тест забывает эти учетные данные, как только перенаправляет меня обратно на запрашиваемую страницу.

Ничего интересного не появляется в журнале ошибок apache.

Фрагменты журнала разработчиков:

Фев 09 10:05:51 symfony [info] {sfPatternRouting} Сопоставить маршрут "report" (/report.:sf_format) для / report с массивом параметров (  'module' => 'report',  'action' => 'index',  'sf_format' => 'html',) 09 февраля, 10:05:52 symfony [info] {sfFilterChain} Выполнение фильтра "sfRenderingFilter", 09 февраля 10:05:52 symfony [info] {sfFilterChain} Выполнение фильтра "sfGuardRememberMeFilter" 09 10:05:52 symfony [info] {sfFilterChain} Выполнение фильтра "sfBasicSecurityFilter", февраль 09 10:05:52 symfony [info] {sfBasicSecurityFilter} Действие "report/index" требует аутентификации, пересылка в "sfGuardAuth/signin" февраль 09 10:05:52 symfony [info] {sfFilterChain} Выполнение фильтра "sfRenderingFilter" 09 февраля 10:05:52 symfony [info] {sfFilterChain} Выполнение фильтра "sfGuardRememberMeFilter" 09 февраля 10:05:52 symfony [info] {haf} Выполнение фильтра "sfExecutionFilter" 09 февраля 10:05:52 symfony [info] {sfGuardAuthActions} Вызов "sfGuardAuthActions->executeSignin()" 09 февраля 10:05:52 symfony [info] {sfPHPView} Render "/Library/WebServer/ Веб-сайты / Документы / плагины / sfDoctrineGuardPlugin/modules/sfGuardAuth/templates/signinSuccess.php"Фев 09 10:05:52 symfony [info] {sfPartialView} Визуализация" / Библиотека / WebServer / Веб-сайты /Documents/pluginsGluPlugin / suDo /modules/sfGuardAuth/templates/_signin_form.php"09 февраля 10:05:52 symfony [info] {sfPHPView} Украсить содержимое с помощью"/Library/WebServer/WebSites/Documents/apps/backend/templates/layout.php"9 февраля 10:05:52 symfony [info] {sfPHPView} Визуализация "/Library/WebServer/WebSites/Documents/apps/backend/templates/layout.php" Фев 09 10:05:52 symfony [info] {sfWebResponse} Состояние отправки "HTTP/1.1 401 Unauthorized"
Feb 09 10:05:52 symfony [info] {sfWebResponse} Отправить заголовок"Content-Type: text/html; charset=utf-8"
Feb 09 10:05:52 symfony [info] {sfWebDebugLogger} Конфигурация 12,62 мс (12) фев 09 10:05:52 symfony [info] {sfWebDebugLogger} Фабрики 58,15 мс (1) фев 09 10: 05:52 symfony [info] {sfWebDebugLogger} Действие "sfGuardAuth/signin" 6,18 мс (1) февраль 09 10:05:52 symfony [info] {sfWebDebugLogger} Просмотр "Success" для "sfGuardAuth/signin" 13,92 мс (1) Фев 09 10:05:52 symfony [info] {sfWebDebugLogger} Частичное "sfGuardAuth/_signin_form" 4.84 мс (1) Фев 09 10:05:52 symfony [info] {sfWebResponse} Отправка контента (53797 o) Фев 09 10:06:04 symfony [info] {sfPatternRouting} Сопоставить маршрут "sf_guard_signin" (/login) для / login с массивом параметров (  'module' => 'sfGuardAuth',  'action' => 'signin',)
Feb 09 10:06:04 symfony [info] {sfGuardSecurityUser} Пользователь аутентифицирован 09.0210:06:04 symfony [info] {sfGuardSecurityUser} Добавить учетные данные (ы) "admin" фев 09 10:06:04 symfony [info] {sfFrontWebController} Перенаправить на "http://localhost/backend_dev.php/"Фев 09 10:06:04 symfony [info] {sfWebResponse} Состояние отправки "HTTP/1.1 302 найдено" Фев 09 10:06:04 symfony [info] {sfWebResponse} Отправить заголовок "Расположение: http:/localhost/backend_dev.php/" Фев 09 10:06:04 symfony [info ] {sfWebResponse} Отправить заголовок "Content-Type: text/html; charset=utf-8"
Feb 09 10:06:04 symfony [info] {sfWebDebugLogger} Конфигурация 1,30 мс (8)
Feb 09 10:06:04 symfony [info] {sfWebDebugLogger} Фабрики 58,35 мс (1) февраль 09 10: 06:04 symfony [info] {sfWebDebugLogger} Действие "sfGuardAuth/signin" 217,06 мс (1) февраль 09 10:06:04 symfony [info] {sfWebDebugLogger} База данных (доктрина) 0,03 мс (5) февраль 09 10:06: 04 symfony [info] {sfWebResponse} Отправка содержимого (123 o) фев. 09 10:06:04 symfony [info] {sfPatternRouting} Сопоставить маршрут "домашняя страница" (/) для / с массивом параметров (  'module' => 'report',  'action' => 'index',)
Feb 09 10:06:04 symfony [info] {sfFilterChain} Выполнение фильтра "sfRenderingFilter"
Feb 09 10:06:04 symfony [info] {sfFilterChain} Выполнение фильтра "sfGuardRememberMeFilter"
Feb 09 10:06:04 symfony [info] {sfFilterChain} Выполнение фильтра "sfBasicSecurityFilter", февраль 09 10:06:04 symfony [info] {sfFilterChain} Выполнение фильтра "sfExecutionFilter", 09 февраля 10:06:04 symfony [info] {reportActions} Вызовите "reportActions->executeIndex()"
Feb 09 10:06:04 symfony [info] {sfPHPView} Визуализация "/Library/WebServer/WebSites/Documents/apps/backend/modules/report/templates/indexSuccess.php" 09 февраля 10:06:05 symfony [info] {main} Вызов "навигация" ->executeNavMenu()"09 февраля 10:06:05 symfony [info] {sfWebResponse} Статус отправки"HTTP/1.1 200 OK"09 февраля 10:06:05 symfony [info] {sfWebResponse} Отправить заголовок" Тип содержимого: текст /html; charset=utf-8"
Feb 09 10:06:05 symfony [info] {sfWebDebugLogger} Конфигурация 1.93 мс (10)
Feb 09 10:06:05 symfony [info] {sfWebDebugLogger} Фабрики 60.49 мс (1) февраль 09 10: 06:05 symfony [info] {sfWebDebugLogger} Действие "отчет / индекс" 66,68 мс (1) фев 09 10:06:05 symfony [info] {sfWebDebugLogger} База данных (доктрина) 0,02 мс (3) февраль 09 10:06: 05 symfony [info] {sfWebDebugLogger} Просмотр "Success" для "report/index" 454,39 мс (1) фев 09 10:06:05 Symfony [info] {sfWebDebugLogger} Компонент "navigation/navMenu" 0,17 мс (1) фев 09 10:06:05 symfony [info] {sfWebDebugLogger} Частичное "навигация /_navMenu" 19,78 мс (1) фев 09 10:06:05 symfony [info] {sfWebResponse} Отправка содержимого (164075 o)

Фрагменты журнала испытаний:

Фев 09 06:21:36 symfony [info] {sfPatternRouting} Сопоставить маршрутный "отчет" (/report.:sf_format) для / report с массивом параметров (  'module' => 'report',  'action' => 'index',  'sf_format' => 'html',) 09 февраля 06:21:36 symfony [info] {sfFilterChain} Выполнение фильтра "sfRenderingFilter" 09 февраля 06:21:36 symfony [info] {sfFilterChain} Выполнение фильтра "sfGuardRememberMeFilter" 09 06:21:36 symfony [info] {sfFilterChain} Выполнение фильтра "sfBasicSecurityFilter" 09 февраля 06:21:36 symfony [info] {sfBasicSecurityFilter} Действие "report/index" требует аутентификации, переадресация в "sfGuardAuth/signin" февраль 09 06:21:36 symfony [info] {sfFilterChain} Выполнение фильтра "sfRenderingFilter" 09.02 06:21:36 symfony [info] {sfFilterChain} Выполнение фильтра "sfGuardRememberMeFilter" 09 февраля 06:21:36 symfony [info] {haf} Выполнение фильтра "sfExecutionFilter" 09 февраля 06:21:36 symfony [info] {sfGuardAuthActions} Вызов "sfGuardAuthActions->executeSignin()" 09 февраля 06:21:36 symfony [info] {sfPHPView} Render "/home/username/test.example.com/project/plugins/sfDoctrineGuardPlugin/modules/sfGuardAuth/templates/signinSuccess.php"Фев 09 06:21:36 symfony [info] {sfPartialView} Визуализация"/home/username/test.example.com/project/plugins/sfDoctrineGuardPlugin/modules/sfGuardAuth/templates/_signin_form.php"09 февраля 06:21:36 symfony [info] {sfPHPView} Украсить содержимое с помощью"/home/username/test.example.com/project/apps/backend/templates/layout.php"Фев 09 06:21:36 symfony [info] {sfPHPView} Визуализация" /home/username/test.example.com/project/apps/backend/templates/layout.php "Фев 09 06:21:36 symfony [info] {sfWebDebugLogger} Конфигурация 822,85 мс (12) фев. 09 06:21:36 symfony [info] {sfWebDebugLogger} Фабрики 343,18 мс (1) фев. 09 06:21:36 symfony [info] {sfWebDebugLogger} Действие "sfGuardAuth/signin" 7,63 мс (1) февраль 09 06:21:36 symfony [info] {sfWebDebugLogger} Просмотр "Success" для "sfGuardAuth/signin" 19.09 мс (1) фев 09 06:21:36 symfony [info] {sfWebDebugLogger} Частичное "sfGuardAuth / _signin_form" 4,44 мс (1) Фев 09 06:21:36 symfony [info] {sfWebResponse} Отправка содержимого (52356 o) Фев 09 06:21:45 symfony [info] {sfPatternRouting} Сопоставить маршрут "sf_guard_signin" (/login) для / login с массивом параметров (  'module' => 'sfGuardAuth',  'action' => 'signin',)
Feb 09 06:21:45 symfony [info] {sfGuardSecurityUser} Пользователь аутентифицирован 09.02 06:21:45 symfony [info] {sfGuardSecurityUser} Добавить учетные данные "admin" Фев 09 06:21:45 symfony [info] {sfFrontWebController} Перенаправление на "http://test.rippil.com/backend_dev.php/" Фев 09 06:21:45 symfony [info] {sfWebDebugLogger} Конфигурация 21,18 мс (8) фев 09 06:21:45 фабрики symfony [info] {sfWebDebugLogger} 162,69 мс (1) фев 09 06:21:45 symfony [info] {sfWebDebugLogger} Действие "sfGuardAuth/signin" 233,96 мс (1) фев 09 06:21:45 symfony [info] {sfWebDebugLogger} База данных (доктрина) 0,03 мс (7) фев 09 06:21:45 symfony [info] {sfWebResponse} Отправка контента (118 o) фев 09 06:21:46 symfony [info] {sfPatternRouting} Сопоставить маршрут "домашняя страница" (/) для / с параметрами array (  'module' => 'reporttt',  'action' => 'index',)
Feb 09 06:21:46 symfony [info] {sfFilterChain} Выполнение фильтра "sfRenderingFilter" 09 февраля 06:21:46 symfony [info ] {sfFilterChain} Выполнение фильтра "sfGuardRememberMeFilter" 09 февраля 06:21:46 symfony [info] {sfFilterChain} Выполнение фильтра "sfBasicSecurityFilter" февраль 09 06:21:46 symfony [информация] {sfBasicSecurityFilter, пересылка в "sfGuardAuth/signin" 09 февраля 06:21:46 symfony [info] {sfFilterChain} Выполнение фильтра "sfRenderingFilter" 09 февраля 06:21:46 symfony [info] {sfFilterChain} Выполнение фильтра "sfGuardRememberMeFilter" 21:46 symfony [info] {sfFilterChain} Выполнение фильтра "sfExecutionFilter" 09 февраля 06:21:46 symfony [info] {sfGuardAuthActions} Вызов "sfGuardAuthActions->executeSignin()" 09 февраля 06:21:46 symfony [info] {sfPHPView} Render "/home/username/test.example.com/project/plugins/sfDoctrineGuardPlugin/modules/sfGuardAuth/templates/signinSuccess.php" 09 февраля 06:21:46 symfony [info] {sfPartialView} Render "/home/username/test.example.com/project/plugins/sfDoctrineGuardPlugin/modules/sfGuardAuth/templates/_signin_form.php" фев 09 06:21:46 symfony [info] {sfPHPView} Deco с "/home/username/test.example.com/project/apps/backend/templates/layout.php" 09 февраля 06:21:46 symfony [info] {sfPHPView} Render "/home/username/test.example.com/project/apps/backend/templates/layout.php"Фев 09 06:21:46 symfony [info] {sfWebDebugLogger} Конфигурация 13,92 мс (12) фев 09 06:21:46 symfony [info] {sfWebDebugLogger} Фабрики 251.75 ms (1) фев 09 06:21:46 symfony [info] {sfWebDebugLogger} Действие "sfGuardAuth/signin" 31.00 мс (1) фев 09 06:21:46 symfony [info] {sfWebDebugLogger} Просмотр "Success" для "sfGuardAuth" /signin" 57,79 мс (1) февраль 09 06:21:46 symfony [info] {sfWebDebugLogger} Частичное"sfGuardAuth/_signin_form" 8,09 мс (1) фев 09 06:21:46 symfony [info] {sfWebResponse} Отправить содержимое (52428 о)

Вероятно, стоит упомянуть этот фрагмент из backend / templates / layout.php, который учитывает строки навигации / _navMenu в Dev, но не в тесте:
<?php if ($sf_user->isAuthenticated()): ?>
    <?php include_component('navigation', 'navMenu'); ?>
    ...
 <?php endif ?>

Связанный пост в группе пользователей symfony:

Вы должны проверить журналы для symfony и apache.

Габриель

28 мая, 14:33, sdwdd написал:

Всем привет.

Возникла пара проблем с установкой Symfony 1.4:
1. [не связано]
2. Проблема с плагином sfGuard.
Он работает нормально в среде разработки, однако в тестовой среде после входа пользователя он теряет сеанс. Пользователь входит в систему, но после перезагрузки страницы сеанс аутентификации теряется.

Установка - это ядро ​​Symfony 1.4 с sfGuardPlugin и некоторыми пользовательскими шаблонами.

Есть идеи по этому поводу? Я чувствую, что есть проблема с конфигурацией сервера, однако не знаю, что может быть не так (поднял memory_limit до 512Mb).

Спасибо,
Serg

1 ответ

Решение

Я нашел ответ после советов от группы Google symfony-users.

Первый совет:

Это похоже на проблему с сеансом на вашем сервере. Если переменная сеанса не сохранена, статус аутентификации не может быть сохранен. Вам следует обратиться в службу поддержки Dreamhost, чтобы узнать, почему переменные сеанса не работают.

Кристоф | Stof

Второй совет:

Это не предложение, связанное с Symfony.
Я обнаружил, что проблемы с сессиями были вызваны модулем suhosin, который поставляется со многими хостами на основе Ubuntu. Попробуйте отключить шифрование сеанса и посмотрите, поможет ли это. Например, я обнаружил, что иногда корень документа является частью шифрования и может не всегда работать должным образом.
НТН
С уважением,
Йохен Даум

Оказывается, моя хостинговая среда использует закаленный PHP suhosin, что, вероятно, является причиной проблемы. Добавив suhosin в свой поиск решений, я нашел это в oldforums.symfony-project.org:

Re: Сессии пользователя не сохраняются на сервере Ubuntu [сообщение #100928 является ответом на сообщение #100918 ]
Пн, 14 июня 2010 19:33 dklanac
Вот мой последний пост. Я понял, что проблема была только в моей тестовой среде. sfSessionTestStorage не устанавливает нужный мне файл cookie. Я изменил его на sfSessionStorage и переименовал мой файл cookie с суффиксом "test", чтобы предотвратить конфликты файлов cookie, и все происходило надлежащим образом. Это также объясняет, почему я смог увидеть правильное поведение в своем экземпляре dev, поскольку он также использует обычный класс sfSessionStorage.

Мы используем отдельные субдомены для dev, test, stage и production, поэтому мое решение было еще проще. Я только что изменил sfSessionTestStorage на sfSessionStorage в apps/appname/config/factories.yml. Я не ожидаю необходимости менять имя файла cookie.

Другие вопросы по тегам