登录后再次出现Symfony2-登录表单

时间:2012-03-22 14:18:04

标签: php symfony

嗨stackoverflow朋友,

我有一个实例,在symfony2中我创建了一个安全包(未使用FOS USER BUNDLE),当我登录时,我尝试再次访问登录页面,显示登录表单。是否没有重定向到默认页面,即使我确实已登录。登录后如何防止此登录表单。

以下是我的security.yml

已更新

firewalls:
        main:
            pattern: ^/
            anonymous: ~
            form_login:
                login_path: /login
                check_path: /login_check
            logout:
                path: /logout
                target: /login    

    access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/centerreg, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/customredirect, roles: ROLE_USER }
        - { path: ^/admin/, roles: ROLE_ADMIN }
        - { path: ^/center/, roles: ROLE_CENTER }
        - { path: ^/client/, roles: ROLE_CLIENTADMIN }
        - { path: ^/examcenter/, roles: ROLE_EXAMCENTER }
        - { path: ^/tutor/, roles: ROLE_TUTOR }
        - { path: ^/evaluator/, roles: ROLE_EVALUATOR }
        - { path: ^/student/, roles: ROLE_STUDENT }
        - { path: ^/user/, roles: ROLE_USER }

任何帮助都会很明显。

2 个答案:

答案 0 :(得分:21)

Symfony不会自动执行此操作,因为登录页面始终可以访问,如security.yml所示:

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

如果您不希望经过身份验证的用户访问登录页面,则需要手动将其重定向到登录页面。为此,请转到Controller进行登录操作,并在loginAction()函数的开头添加:

public function loginAction()
{
    if ($this->get('security.context')->isGranted('IS_AUTHENTICATED_FULLY'))
    {
        // redirect authenticated users to homepage
        return $this->redirect($this->generateUrl('_homepage'));
    }

    //other code goes here...
}

这会将经过身份验证的用户重定向到您的主页。当然,替换' _homepage'路由您希望将用户重定向到的页面的名称。

答案 1 :(得分:1)

你可以用你的路线更新问题吗?

我认为您应该拥有需要身份验证的默认路径(例如/secure-area)以及代表您的登录表单的其他一些(例如/secure-area/login)。因此,基本上,返回的访问者会访问/secure-area/login,而是访问/secure-area。这样它就不会显示登录但是从会话重新加载用户......