嗨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 }
任何帮助都会很明显。
答案 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
。这样它就不会显示登录但是从会话重新加载用户......