Symfony 3.4.20 и FOSUserBundle — ‘remember me’ не работают

#php #symfony #remember-me

#php #symfony #remember-me

Вопрос:

При следующей соответствующей конфигурации в security.yml :

 security:
    firewalls:
        # disables authentication for assets and the profiler, adapt it according to your needs
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

        main:
            pattern:
            form_login:
                provider: fos_userbundle
                csrf_token_generator: security.csrf.token_manager

            logout:       true
            anonymous:    true
            logout_on_user_change: true
            remember_me:
                secret: '%secret%'
                secure: true
                httponly: true
                lifetime: 31536000
 

Токен сеанса remember me действует только в течение сеанса браузера, а не года, как указано в конфигурации. Может ли это быть связано с secure: true настройкой? На моей машине разработки не установлен протокол TLS, так может ли это быть причиной? Или есть что-то еще, что я должен искать? Глядя на документацию, похоже, что я все настраиваю правильно, поэтому я немного растерялся.

Комментарии:

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

2. При этом я бы рекомендовал не использовать FOSUB

3. Я нахожусь на этапе этого проекта, когда я не могу переключиться с FOSUB на что-то другое. Можете ли вы написать свое решение в качестве ответа? Может быть, я смогу собрать что-нибудь из этого

Ответ №1:

Оказывается, мое внутреннее ощущение secure: true было правильным. Я установил его false во время теста, и файл cookie был правильным. Поскольку на моей машине разработки нет SSL / TLS, она не может отправить защищенный файл cookie, если он настроен. Он должен работать на моем рабочем сервере, учитывая, что у меня есть рабочий SSL / TLS в этой среде.

Ответ №2:

Хотя уже поздно, это может кому-то помочь.
Добавление require_previous_session: false опции в разделе form_login: исправлена моя проблема.
Вот так
form_login:

require_previous_session: false

Согласно https://symfony.com/doc/3.1/reference/configuration/security.html ,
по умолчанию сеанс должен существовать до отправки запроса на проверку подлинности. Итак, если вы хотите реализовать функцию remember me, вам нужно установить require_previous_session значение false