Сессия потеряна во время олицетворения

Я использую SonataAdminBundle с настроенным sonata_user в config.yml:

sonata_user:
    impersonating:
        route:        _profile_logged
    # more config

У меня есть панель администратора с префиксом /admin. Я настроил UserAdmin (на основе объекта User) с полем impersonating. Я попытался перейти к олицетворению пользователя, щелкнув ссылку в моей панели администратора, и я увидел страницу входа в приложение (не панель администратора).

Я проверил панель инструментов разработчика и заметил, что запрос на олицетворение пользователя был перенаправлен на страницу входа. Это довольно странно, потому что этот запрос имеет в основном те же параметры, что и предыдущий (для списка пользователей в админке). Особенно раздел Request Cookies идентичен.

Я заметил одно отличие в Request Headers: первый запрос (для списка пользователей в админке) отправляет cache-control max-age=0, а второй (для олицетворения) нет.

Очевидно, я вошел в панель администратора под пользователем с полными правами (в частности, ROLE_ALLOWED_TO_SWITCH).

Итак, как я могу олицетворять себя прямо из панели администратора? Что может быть не так в моем приложении?


person NHG    schedule 01.08.2013    source источник


Ответы (2)


Можете ли вы попробовать использовать config.yml:

sonata_user:
    ...
    impersonating:
        route:                sonata_admin_dashboard

И в security.yml:

security:
    ...
    firewalls:
        ...
        admin:
            ...
            switch_user:        true

Эти работают для меня.

person TautrimasPajarskas    schedule 01.08.2013
comment
Да, у меня аналогичная конфигурация. К сожалению, не работает для меня. Вероятно, есть проблема с общим контекстом безопасности между брандмауэрами. Я проверю это. - person NHG; 01.08.2013

Я обнаружил проблему:

4. Несколько брандмауэров не используют общий контекст безопасности из документации: http://symfony.com/doc/current/book/security.html#book-security-common-pitfalls

И нашел решение:

Контекст брандмауэра из документов: http://symfony.com/doc/current/reference/configuration/security.html#reference-security-firewall-context

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

person NHG    schedule 01.08.2013
comment
Превосходно! Добавление context: user к обоим брандмауэрам заставит работать олицетворение! - person borN_free; 12.11.2014