У меня есть сценарий, когда пользователь получает электронное письмо от системы с конкретной ссылкой, требующей входа в систему. например, ссылка http://test.url.com/product/2
. Если щелчок по этой ссылке перенаправляет пользователя на страницу входа в систему и перенаправляет на полученный URL при успешном входе в систему.
Но проблема, с которой я столкнулась, – это система, всегда перенаправляемая к местоположению по умолчанию, которое является http://test.url.com/dashboard
.
Чтобы реализовать это, я использовал http://symfony.com/doc/current/reference/configuration/security.html#redirecting-after-login use_referer: true
в security.yml
и для его проверки. Я использовал print_r($request->headers->get('referer'));
на странице входа.
Но это всегда возвращает null
когда я нажимаю ссылку из письма, но возвращает правильный URL-адрес реферера, когда я выхожу из системы и приземляется на странице входа.
EDIT – security.yml
security: providers: in_memory: memory: ~ webservice: id: user_provider encoders: Project\Bundle\LoginBundle\Security\User\User: plaintext access_control: - { path: ^/signin, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: "^/(signup|forgotpassword|resetpassword/[0-9a-z]+)?$", roles: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/, roles: IS_AUTHENTICATED_FULLY } firewalls: secured_area: pattern: ^/ anonymous: ~ form_login: login_path: /signin check_path: _security_check access_denied_url: forgotpassword dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false default: anonymous: true
Итак, у вас есть 2 варианта:
Вы можете либо заполнить референт вручную, либо его можно заполнить в своем контроллере, вызвав переадресацию имени, указав его в security.yml. Я рекомендую метод security.yml, так как я на самом деле не пробовал ручную совокупность, потому что я не доверяю себе или кому-либо еще, чтобы всегда помнить, чтобы заполнить ссылку в этих ситуациях. security.yml также имеет преимущество не иметь код перенаправления по всему месту.
$request->getSession()->set('referer', $request->attributes->all());
или
access_control: - { path: ^/product/.*, roles: IS_AUTHENTICATED_REMEMBERED }