Symfony2:如何将login_check路由名称更改为其他人并重定向

时间:2015-03-06 00:00:03

标签: security symfony login

问题1

如何将login_check路由更改为其他命名路由?

例如,登录表单会发布到www.example.com/auth而不是www.example.com/login_check。然后auth将像login_check一样执行检查。

问题2

如果用户在已经过身份验证时尝试访问/登录,如何重定向用户?

例如,当用户尝试访问/登录时,如果他/她已经过身份验证,则会被重定向到/ account而不是显示登录表单。

非常感谢。

1 个答案:

答案 0 :(得分:1)

如果要在src/Pk/AppBundle/Resources/config/routing.yml内加载捆绑的路由,可以为路径创建一个条目:

# src/Pk/AppBundle/Resources/config/routing.yml
homepage:
    pattern:  /
    defaults: { _controller: AppBundle:Home:index }
login:
    pattern:  /login
    defaults: { _controller: AppBundle:Auth:login}
login_check:
    pattern:  /auth
logout:
    pattern:  /logout
account:
    pattern:  /account
    defaults: { _controller: AppBundle:Account:index}

和您的security.yml

# app/config/security.yml
firewalls:
      main:
          pattern:    ^/
          form_login:
              check_path: login_check       # the name of your check route
              login_path: login             # the name of your login route
              default_target_path: account  # the name of your account route
              always_use_default_target_path: true
          logout:
              path:   logout
              target: /
          anonymous: ~
          remember_me:
              key:      "%secret%"
              lifetime: 31536000 # 365 days in seconds
              path:     /
              domain:   ~ # Defaults to the current domain from $_SERVER

这应该可以使用Symfony 2.6 (Documentation)

但是它会在登录后全部重定向,如果您想要的只是当客户端GET / login然后您可以使用控制器:

# AppBundle:Auth
public function loginAction ()
{
    if($this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')){
        return $this->redirect($this->generateUrl('account'));
    }
    // logic of the loginpage
}

如果您想要更多自定义,可以为其添加登录事件侦听器。 (For example

如果我没有错过任何它应该有效。

如果我弄错了,请告诉我,我希望这会对你有所帮助。