在symfony 2.1中登录失败后,不会重定向到登录页面

时间:2012-12-23 02:32:19

标签: symfony symfony-2.1

登录失败后,应用程序不会重定向到登录页面。这是我的security.yml配置:

security:
encoders:
    Acme\SecurityBundle\Entity\Users: sha512

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER

providers:
    main:
        entity: { class: Acme\SecurityBundle\Entity\Users}

firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false

    login:
        pattern:  ^/login$
        security: false

    secured_area:
        pattern:    ^/admin/
        form_login:
            check_path: /login_check
            login_path: /login
        logout:
            path:   /logout
            target: /home

access_control:
    - { path: ^/admin, roles: ROLE_ADMIN }

这是我的控制器:

class LoginController extends Controller {

/**
 * @Route("/login",name="login")
 */
public function loginAction() {
    //displays login form and renders the login.html.twig
}

/**
 * @Route("/login_check", name="login_check")
 */
public function loginCheckAction() {
    // The security layer will intercept this request
}

登录失败后,我收到错误:

  The controller must return a response (null given). Did you forget to add a return statement somewhere in your controller?
  500 Internal Server Error - LogicException 

我尝试了symfony附带的Demo里面的登录部分。我发现了相同的结果。 登录失败后,我需要进行哪些修改才能重定向到登录表单?

1 个答案:

答案 0 :(得分:2)

您无需为登录和注销操作创建控制器类。您只需要在routing.yml中指定这些路由,例如:

login_path:
  pattern: /login
login_check_path:
  pattern: /admin/login_check
logout_path:
  pattern: /admin/logout

这些路由由安全组件自动处理。

在防火墙配置中,您的check_path应定义为/admin/login_check。注销路径应为/admin/logout