Symfony 4 Запомнить меня не работает, cookie уничтожается при перезагрузке браузера - PullRequest
0 голосов
/ 14 октября 2018

У меня проблема, очень похожая на: Symfony Запомнить меня не работает, cookie уничтожается при перезагрузке браузера

К сожалению, их решение не решает проблему в Symfony 4.

После входа в систему создается файл cookie «REMEMBERME».Если я перезагружаю свой браузер, я все еще вижу свой файл cookie, но когда я получаю доступ к странице под защитой IS_AUTHENTICATED_REMEMBERED, она не работает, и я перенаправлен на страницу входа, затем файл cookie уничтожается, и пользователь долженснова войдите в систему.

Я разрабатываю процесс аутентификации, как описано в официальной документации (действительно, для книги, никакой необычной настройки, нет FOSUSERBUNDLE).

Вы можете найти мой сервис.yamlвстроенный, как в документации

security:
encoders:
    App\Entity\User:
        algorithm: bcrypt
# https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
providers:
    in_memory: { memory: ~ }
    our_db_provider:
        entity:
            class: App\Entity\User
            property: email
firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false
    main:
        pattern:    ^/
        http_basic: ~
        provider: our_db_provider
        anonymous: ~
        form_login:
            login_path: login
            check_path: login
            default_target_path: dashboard
        remember_me:
            secret:   '%kernel.secret%'
            lifetime: 604800 # 1 week in seconds
            path:     /
            secure:   true
            name:     REMEMBERME
            remember_me_parameter: _remember_me
        logout:
            path:  /logout
            target: /
    secured_area:
        form_login:
            csrf_token_generator: security.csrf.token_manager
            provider: our_db_provider
        logout:
            path:   /logout
            target: /

role_hierarchy:
        ROLE_ADMIN:      ROLE_USER
access_control:
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/profile, roles: IS_AUTHENTICATED_REMEMBERED }

Моя функция входа также подробно описана в документации

public function login(Request $request, AuthenticationUtils $authenticationUtils)
{
    // get the login error if there is one
    $error = $authenticationUtils->getLastAuthenticationError();

    // last username entered by the user
    $lastEmail = $authenticationUtils->getLastUsername();

    return $this->render('platform/user/login.html.twig', [
        'last_email' => $lastEmail,
        'error'         => $error,
    ]);
}

Я пыталсязамените ROLE_USER на IS_AUTHENTICATED_REMEMBERED в моих маршрутах (я не понимаю, в чем именно разница, я прочитал их документ об этом), но ничего не изменилось.Файл cookie находится здесь, но он все равно не помогает мне оставаться в системе.

Любая помощь здесь очень ценится.Я бы хотел, чтобы в моем приложении была функция «Помни меня».Большое спасибо.

1 Ответ

0 голосов
/ 30 октября 2018

Если файл cookie доступен, но вы не прошли аутентификацию, возможно, проверьте, что ваши тесты аутентификации (!) В порядке?

IS_AUTHENTICATED_REMEMBERED будет иметь значение true, но IS_AUTHENTICATED_FULLY имеет значение false, поскольку второй исключает запоминаниеme cookie авторизованные пользователи.

(Прочтите еще раз doc и измените коды проверки подлинности)

Проверьте и другие вещи:

  • СделалВы делаете / принудительно повторную аутентификацию ?
  • Форма входа содержит маркер crfs и флажок "Запомнить меня"?
  • Проверьте все остальные параметры me * тоже(изменить значения по умолчанию)
  • Последнее имя пользователя успешно заполнено в форме входа в систему?
...