2011-12-27 7 views
9

Я использую FOSUserBundle для аутентификации в Symfony2. Все прекрасно работает, кроме «помни меня». Мой security.yml выглядит так:FOSUserBundle и запомни меня

security: 
providers: 
    fos_userbundle: 
     id: fos_user.user_manager 

encoders: 
    'FOS\UserBundle\Model\UserInterface': sha512 

firewalls: 
    main: 
     pattern: ^/ 
     form_login: 
      provider: fos_userbundle 
     logout:  true 
     anonymous: true 
     remember_me: 
      key:  aSecretKey 
      lifetime: 3600 
      path: /
      domain: ~ 

access_control: 
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin, role: ROLE_ADMIN } 

role_hierarchy: 
    ROLE_ADMIN:  ROLE_USER 
    ROLE_SUPER_ADMIN: ROLE_ADMIN 

Кто-нибудь знает, как это решить.

ответ

2

Remember me функция может не работать, если браузер не может установить файлы cookie на ваш domain (localhost, например). Если это так, то настройте свой домен как действительное доменное имя (например, dev.site.com). Также убедитесь, что вы очистили кеш.

+1

Спасибо за ответ. Я пробовал эти возможности, но потом выясняю, что проблема заключается в выходе из системы: true в security.yml. Я удаляю эту строку, и тогда все работает нормально. – repincln

0

Это работает для меня жизнь сессии в оной конфигурации remenber_me безопасности:

framework: 
    session: 
     default_locale: %locale% 
     auto_start:  true 
     lifetime:  3600 
+1

Где этот раздел должен быть добавлен? security.yml, внизу ... какой? –

10

Это не работает для меня, потому что ни я использовал 2 поставщиков пользователей: FOSUserBundle и FosFacebook.

Файл cookie фактически был установлен, но в TokenBasedRememberMeServices processAutoLoginCookie я видел, что использовался неправильный провайдер.

Чтобы исправить это, мне пришлось указать в security.yml в разделе remember_me поставщика, которого я хотел использовать.

firewalls: 
    main: 
     ... 
     remember_me: 
      key:  "%secret%" 
      lifetime: 2592000 
      path: /
      domain: ~ 
      user_provider: fos_userbundle 

Возможно, это тоже помогает кому-то еще.

+1

Omg лучший ответ когда-либо !! Сэкономил мне тон отладки <3 –

+0

Это должен быть ответ победителя! – Sergiu

5

Как сказал «Адриан С», но с небольшим изменением, которое сработало для меня.

вместо "ключ" я использовал "секретно"

firewalls: 
    main: 
     ... 
     remember_me: 
      secret:  "%secret%" 
      lifetime: 2592000 
      path: /
      domain: ~ 
      user_provider: fos_userbundle