我有一个场景,用户收到来自系统的电子邮件,其中包含需要登录的特定链接。例如,链接是http://test.url.com/product/2
。点击此链接会将用户重定向到登录页面,并在成功登录后重定向到收到的URL。
但我遇到的问题是系统始终重定向到默认位置http://test.url.com/dashboard
。
为了实现这一点,我在use_referer: true
中使用了http://symfony.com/doc/current/reference/configuration/security.html#redirecting-after-login security.yml
并对其进行了测试,我在登录页面上使用了print_r($request->headers->get('referer'));
。
但是当我点击电子邮件中的链接时,这总是会返回null
,但是当我退出系统并登陆登录页面时,它会返回正确的推荐人网址。
编辑 - 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
答案 0 :(得分:0)
所以你有两个选择:
您可以手动填充referer,也可以通过在security.yml中指定登录重定向来在控制器中填充它。我推荐使用security.yml方式,因为我实际上没有尝试过手动填充,因为我不相信自己或其他任何人在这种情况下总是记住填充参考。 security.yml还具有不在整个地方都有重定向代码的好处。
$request->getSession()->set('referer', $request->attributes->all());
或
access_control:
- { path: ^/product/.*, roles: IS_AUTHENTICATED_REMEMBERED }