我正在尝试使用symfony2实现登录页面,为此我使用自己的自定义用户提供程序。
问题是当用户输入他的凭证时,他将无法被识别。这样,我的意思是底部的调试栏显示“你没有经过身份验证。”并且$request->getUser()
将返回null。但奇怪的是,用户仍然可以访问需要他登录的页面。
我认为问题不在于身份验证,因为当我输入错误的密码时,我会收到警告,但是当我输入正确的密码时,我会被重定向到第一页(但它仍然说“您未经过身份验证。“)
你知道我应该在哪里寻找这个问题吗?
我已将security.yml
文件附加在this pastebin和routing.yml
this one中。{
Here是我的自定义用户提供商的代码
This是User类的定义。
编辑:这是我的get('security.context')->getToken()
的var_dump。有趣的是authenticated
是真的,但getUser()
仍然为空,调试栏显示我没有通过身份验证。
object(Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken)#46 (6) {
["credentials":"Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken":private]=>
NULL
["providerKey":"Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken":private]=>
string(11) "system_area"
["user":"Symfony\Component\Security\Core\Authentication\Token\AbstractToken":private]=>
NULL
["roles":"Symfony\Component\Security\Core\Authentication\Token\AbstractToken":private]=>
array(2) {
[0]=>
object(Symfony\Component\Security\Core\Role\Role)#45 (1) {
["role":"Symfony\Component\Security\Core\Role\Role":private]=>
string(10) "ROLE_ADMIN"
}
[1]=>
object(Symfony\Component\Security\Core\Role\Role)#44 (1) {
["role":"Symfony\Component\Security\Core\Role\Role":private]=>
string(9) "ROLE_USER"
}
}
["authenticated":"Symfony\Component\Security\Core\Authentication\Token\AbstractToken":private]=>
bool(true)
["attributes":"Symfony\Component\Security\Core\Authentication\Token\AbstractToken":private]=>
array(0) {
}
}
答案 0 :(得分:2)
为了获得当前用户,您必须使用:
$this->get('security.context')->getToken()->getUser();
为了检查当前用户是否具有某个角色,请使用:
$this->get('security.context')->isGranted('ROLE_USER')
答案 1 :(得分:1)
我设法解决了这个问题。这是因为我使用的伪代码代替了User对象的序列化。我用实际代码替换它,问题就消失了。