尝试访问登录页面时,将登录用户重定向到主页

时间:2013-11-11 16:53:37

标签: symfony

我试图让我的Symfony2网站在尝试访问登录页面时将登录用户重定向到另一个页面。

这是我的security.yml:

security:
    encoders:
        Cocoa\LoginBundle\Entity\User: 
        algorithm:        sha512

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ]

providers:
    administrators:
        entity: { class: CocoaLoginBundle:User, property: username }

firewalls:
    admin_area:
        pattern:    ^/administration
        form_login:
            login_path:  login
            check_path:  login_check
        logout:
            path:   /administration/logout
            invalidate_session: true
            target: /


access_control:
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY}
    - { path: ^/administration, roles: ROLE_ADMIN }

这是我的控制者:

class LoginController extends Controller {

  public function loginAction() {
    if (false === $this->get('security.context')->isGranted('IS_AUTHENTICATED_FULLY')) {
      return $this->redirect($this->generateUrl('public_homepage'));
    }

    $request = $this->getRequest();
    $session = $request->getSession();

    if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
      $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
    } else {
      $error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
      $session->remove(SecurityContext::AUTHENTICATION_ERROR);
    }

    return $this->render('CocoaLoginBundle:Login:login.html.twig', array(
            'last_username' => $session->get(SecurityContext::LAST_USERNAME),
            'error' => $error));
  }

  public function loginCheckAction() {

  }

}

如果我以匿名用户身份访问登录页面,我会看到登录表单。但是在我登录并加载登录页面后,我收到500服务器错误:

The security context contains no authentication token. One possible reason may be that there is no firewall configured for this URL. 

我在另一个主题中读到的建议修补程序是将登录页面放在防火墙后面。我做到了但仍然是错误500。

我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

这可能是因为你在security.yml中设置的路径^ / login只有IS_AUTHENTICATED_ANONYMOUSLY角色。因此,不允许将身份验证令牌传递给LoginController。

您应该尝试在access_control中为^ / login路径添加ROLE_ADMIN,或者在^ / administration下包含^ / login,这样它将成为^ / administration / login。

作为LoginController中的条件,您应该尝试使用

if($securityContext->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
 return $this->redirect($this->generateUrl('public_homepage'));
}