Security 在symfony2中,登录操作在I';我真的登录了
如果登录用户转到登录操作,我想将他们重定向到另一个页面。但是我不知道如何在Security 在symfony2中,登录操作在I';我真的登录了,security,symfony,login,Security,Symfony,Login,如果登录用户转到登录操作,我想将他们重定向到另一个页面。但是我不知道如何在loginAction方法中检测用户是否登录。登录操作中的安全上下文使我在未注销时看起来好像已注销 作为测试,我在登录站点时请求以下两个页面。为什么我不能在登录操作中访问用户 以下是我的登录操作: public function loginAction() { $token = $this->get('security.context')->getToken(); print_r(get_cla
loginAction
方法中检测用户是否登录。登录操作中的安全上下文使我在未注销时看起来好像已注销
作为测试,我在登录站点时请求以下两个页面。为什么我不能在登录操作中访问用户
以下是我的登录操作:
public function loginAction()
{
$token = $this->get('security.context')->getToken();
print_r(get_class($token));
// Outputs "Symfony\Component\Security\Core\Authentication\Token\AnonymousToken"
print_r($token->getUser());
// Outputs "anon."
}
以下是应用程序中的一般操作,受登录名保护:
public function regularAction()
{
$token = $this->get('security.context')->getToken();
print_r(get_class($token));
// Outputs "Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken"
print_r(get_class($token->getUser()));
// Outputs "Company\BaseBundle\Entity\User"
}
这是我的安全性。yml
:
security:
encoders:
Company\BaseBundle\Entity\User:
algorithm: sha1
iterations: 1
encode_as_base64: false
providers:
main:
entity: { class: Company\BaseBundle\Entity\User, property: user_name }
firewalls:
login_firewall:
pattern: ^/login$
anonymous: ~
main:
pattern: ^/
form_login:
login_path: /login
check_path: /login_check
post_only: true
always_use_default_target_path: false
default_target_path: /
use_referer: true
failure_path: null
failure_forward: false
username_parameter: user_name
password_parameter: password_hash
csrf_parameter: _csrf_token
intention: authenticate
logout:
path: /logout
target: /
acl:
connection: default
编辑:我不认为我的其他防火墙与此相关,但在阅读了ilanco的答案后,我认为它们可能与此相关
security:
encoders:
Company\BaseBundle\Entity\User:
algorithm: sha1
iterations: 1
encode_as_base64: false
providers:
main:
entity: { class: Company\BaseBundle\Entity\User, property: user_name }
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login_firewall:
pattern: ^/login$
anonymous: ~
password_reset:
pattern: ^/passwordreset/*$
anonymous: ~
error_firewall:
pattern: ^/error/.*$
anonymous: ~
unsupported_broswers:
pattern: ^/unsupported$
anonymous: ~
security_question_firewall:
pattern: ^/user/(locked|security_question)/(new)*$
anonymous: ~
api_firewall:
pattern: ^/api/.*$
provider: main
http_basic:
realm: "Secured API Area. Login with your regular credentials"
provider: main
main:
pattern: ^/
form_login:
login_path: /login
check_path: /login_check
post_only: true
always_use_default_target_path: false
default_target_path: /
use_referer: true
failure_path: null
failure_forward: false
username_parameter: user_name
password_parameter: password_hash
csrf_parameter: _csrf_token
intention: authenticate
logout:
path: /logout
target: /
acl:
connection: default
根据ilanco的建议,我删除了以下内容:
login_firewall:
pattern: ^/login$
anonymous: ~
并将其直接添加到提供者
部分:
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
但是,当我访问/登录时,出现了重定向循环错误。我也遇到了这个问题
/login
不是主防火墙的一部分,因此用户无法访问主防火墙
解决此问题的方法是删除您调用的自定义防火墙login\u firewall
,并允许通过ACL访问/login
将以下代码添加到您的security.yml
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
我也在努力解决这个问题
/login
不是主防火墙的一部分,因此用户无法访问主防火墙
解决此问题的方法是删除您调用的自定义防火墙login\u firewall
,并允许通过ACL访问/login
将以下代码添加到您的security.yml
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
设法解决了这个问题-重定向循环的问题是由于缺少对/login页面的访问而导致的。我只做了一个防火墙,设置了匿名访问:~,为非用户定义了访问控制,瞧
security:
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: true
anonymous: ~
secured_area:
pattern: ^/
anonymous: ~
form_login:
login_path: /login
check_path: /login_check
always_use_default_target_path: true
default_target_path: /
logout:
path: /logout
target: /
providers:
main:
entity: { class: Core\UserBundle\Entity\User, property: username }
encoders:
Core\UserBundle\Entity\User:
algorithm: sha256
iterations: 10
encode_as_base64: true
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin, roles: ROLE_SUPERADMIN }
- { path: ^/user, roles: ROLE_USER }
- { path: ^/, roles: IS_AUTHENTICATED_FULLY }
设法解决了这个问题-重定向循环的问题是由于缺少对/login页面的访问而导致的。我只做了一个防火墙,设置了匿名访问:~,为非用户定义了访问控制,瞧
security:
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: true
anonymous: ~
secured_area:
pattern: ^/
anonymous: ~
form_login:
login_path: /login
check_path: /login_check
always_use_default_target_path: true
default_target_path: /
logout:
path: /logout
target: /
providers:
main:
entity: { class: Core\UserBundle\Entity\User, property: username }
encoders:
Core\UserBundle\Entity\User:
algorithm: sha256
iterations: 10
encode_as_base64: true
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin, roles: ROLE_SUPERADMIN }
- { path: ^/user, roles: ROLE_USER }
- { path: ^/, roles: IS_AUTHENTICATED_FULLY }
为了回应你的回答,我编辑了原始帖子。你能看一下吗?把
访问控制:
放在安全:
下,而不是提供者:
作为对你回答的回应,我编辑了原始帖子。你能看一下吗?把访问控制:
放在安全:
下,而不是提供者: