Symfony2-仅限匿名用户访问登录和注册页面
我有一个登录表单这个网站,在我成功登录后,我被重定向到索引。但当我点击后退按钮时,它仍然让我查看登录表单,这并不好。我希望只有匿名观众才能访问登录表单,而不是已经登录的用户。在symfony2中有没有一种简单的方法可以做到这一点?谢谢 这是我的保安Symfony2-仅限匿名用户访问登录和注册页面,symfony,acl,Symfony,Acl,我有一个登录表单这个网站,在我成功登录后,我被重定向到索引。但当我点击后退按钮时,它仍然让我查看登录表单,这并不好。我希望只有匿名观众才能访问登录表单,而不是已经登录的用户。在symfony2中有没有一种简单的方法可以做到这一点?谢谢 这是我的保安 jms_security_extra: secure_all_services: false expressions: true security: encoders: Mata\UserBundl
jms_security_extra:
secure_all_services: false
expressions: true
security:
encoders:
Mata\UserBundle\Entity\User:
algorithm: sha1
encode_as_base64: false
iterations: 1
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
user_db:
entity: { class: MataUserBundle:User, property: username }
firewalls:
secured_area:
pattern: ^/
anonymous: ~
form_login:
check_path: /login_check
login_path: /login
logout:
path: /logout
target: /
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: ROLE_USER }
这可能不是最好或正确的方法,但这是我唯一能找到答案的方法 在我的loginAction方法中,我这样做(请参阅$secured变量)。如果用户会话经过身份验证,那么我将它们重定向到主页/索引页。我不知道如何通过防火墙配置来实现这一点,因为我不相信登录页面会连接防火墙
/**
* @Route("/login", name="login")
* @Template()
*/
public function loginAction()
{
$request = $this->getRequest();
$session = $request->getSession();
// if the session is secured (user is logged in)
// then $secured will be an object with various user information.
$secured = unserialize($session->get('_security_secured'));
if ($secured) {
return $this->redirect($this->generateUrl('home'));
}
// get the login error if there is one
if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
$error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
} else {
$error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
}
return array(
'last_username' => $session->get(SecurityContext::LAST_USERNAME),
'error' => $error,
'embed' => $request->isXmlHttpRequest()
);
}
使用symfony 4,您可以在以下情况下使用allow_解决此问题:
access_control:
- { path: /login, allow_if: "!is_authenticated()" }
以下是allow_if字符串中可用的表达式列表
感谢您的快速回复。我也使用了类似的东西如果($this->get('security.context')->isgrated('IS_AUTHENTICATED_FULLY')){//将经过身份验证的用户重定向到主页返回$this->重定向($this->generateUrl('mata_page_home'));}