重定向到单击(引用)链接的URL

时间:2015-01-06 04:29:37

标签: php symfony redirect login http-referer

我有一个场景,用户收到来自系统的电子邮件,其中包含需要登录的特定链接。例如,链接是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

1 个答案:

答案 0 :(得分:0)

所以你有两个选择:

您可以手动填充referer,也可以通过在security.yml中指定登录重定向来在控制器中填充它。我推荐使用security.yml方式,因为我实际上没有尝试过手动填充,因为我不相信自己或其他任何人在这种情况下总是记住填充参考。 security.yml还具有不在整个地方都有重定向代码的好处。

$request->getSession()->set('referer', $request->attributes->all());

access_control:
    - { path: ^/product/.*, roles: IS_AUTHENTICATED_REMEMBERED }