如果登录用户去登录操作, 我想将它们重定向到另一页。 但我无法找到如何检测用户是否在 login Action
方法内登录。 登录操作中的安全环境使我不登录时我似乎已经登录了 。
作为测试,我在登录网站时请求提供以下两个页面。 为什么我无法在登录操作中访问用户?
以下是我的登录操作 :
public function loginAction()
{
$token = $this->get( security.context )->getToken();
print_r(get_class($token));
// Outputs "SymfonyComponentSecurityCoreAuthenticationTokenAnonymousToken"
print_r($token->getUser());
// Outputs "anon."
}
以下是申请中的一般性行动,受登录保护:
public function regularAction()
{
$token = $this->get( security.context )->getToken();
print_r(get_class($token));
// Outputs "SymfonyComponentSecurityCoreAuthenticationTokenUsernamePasswordToken"
print_r(get_class($token->getUser()));
// Outputs "CompanyBaseBundleEntityUser"
}
这是我的security.yml
:
security:
encoders:
CompanyBaseBundleEntityUser:
algorithm: sha1
iterations: 1
encode_as_base64: false
providers:
main:
entity: { class: CompanyBaseBundleEntityUser, 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
<强力>EDIT:我不认为我的其余防火墙是相关的, 但在阅读 ilanco 回答后,
security:
encoders:
CompanyBaseBundleEntityUser:
algorithm: sha1
iterations: 1
encode_as_base64: false
providers:
main:
entity: { class: CompanyBaseBundleEntityUser, 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 }
但是当我访问/登录时,我有一个重定向回路错误。