symfony无法识别经过身份验证的用户

时间:2013-05-28 15:10:13

标签: authentication symfony

我正在尝试使用symfony2实现登录页面,为此我使用自己的自定义用户提供程序。

问题是当用户输入他的凭证时,他将无法被识别。这样,我的意思是底部的调试栏显示“你没有经过身份验证。”并且$request->getUser()将返回null。但奇怪的是,用户仍然可以访问需要他登录的页面。

我认为问题不在于身份验证,因为当我输入错误的密码时,我会收到警告,但是当我输入正确的密码时,我会被重定向到第一页(但它仍然说“您未经过身份验证。“)

你知道我应该在哪里寻找这个问题吗?

我已将security.yml文件附加在this pastebinrouting.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) {
  }
}

2 个答案:

答案 0 :(得分:2)

为了获得当前用户,您必须使用:

$this->get('security.context')->getToken()->getUser();

为了检查当前用户是否具有某个角色,请使用:

 $this->get('security.context')->isGranted('ROLE_USER')

答案 1 :(得分:1)

我设法解决了这个问题。这是因为我使用的伪代码代替了User对象的序列化。我用实际代码替换它,问题就消失了。