登录后进行symfony 2安全重定向


symfony 2 security redirect after login

我有下一个安全性。yml:

security:
    encoders:
        Test'BackEndBundle'Entity'User:
            algorithm: sha512
            encode-as-base64: true
            iterations: 10
    providers:
        main:
            entity: { class: TestBackEndBundle:User, property: username }
    firewalls:
        main:
            pattern: /.*
            form_login:
                check_path: _security_check
                login_path: _security_login
                default_target_path: homepage
            logout: true
            security: true
            anonymous: true
    access_control:
        - { path: ^/service, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: /.*, roles: {ROLE_PARTNER, ROLE_ADMIN} }

下一条路线:

homepage:
    pattern:  /
    defaults: { _controller: TestBackEndBundle:Default:index }
_security_login:
    pattern:  /login
    defaults: { _controller: TestBackEndBundle:Security:login }
_security_check:
    pattern:  /login_check
_security_logout:
    pattern:  /logout

身份验证工作正常,而不是登录后重定向。应用程序重定向到/wdt/5044c6f2a329c。如何重定向到主页?谢谢

解决方案是取消对_wdt路由的保护。

您之所以会出现这种行为,是因为您的_wdt路由受到保护。当页面从_wdt路由加载工具栏时,它会触发登录。您的登录表单将尝试重定向回触发登录的路由:在本例中为_wdt。

将此添加到安全的access_control中。yml

 - { path: ^/_wdt, roles: 'IS_AUTHENTICATED_ANONYMOUSLY' }

这将允许工具栏在受保护和未受保护的页面中工作,如果页面受到保护,则触发登录表单的页面将按预期工作。

  1. 您必须创建一个success_handler来实现AuthenticationSuccessHandlerInterface
  2. 然后您必须将其声明为服务(在services.xml或services.yml中)
  3. 并将其添加到您的安全配置中

此外,您可以设置always_use_default_target_path: true,然后您的default_target_path将按预期工作。请参阅详细信息。