检查登录在Symfony2中不起作用

时间:2013-10-29 00:17:14

标签: authentication symfony doctrine-orm roles

我尝试配置防火墙以验证用户。此步骤工作正常,因为当我在登录表单中输入错误的用户时,应用程序将返回消息" Bad credentials。",但是当用户和密码正确时,应用程序尝试获取用户失败作用。

我的实体用户名为" Usuario"我的实体Rol被称为" Perfil"。在我的用户实体中有这段代码:

/**
 * @ORM\ManyToMany(targetEntity="AppsManantiales\CommonBundle\Entity\Perfil")
 * @ORM\JoinTable(name="usuarios_perfiles",
 *      joinColumns={@ORM\JoinColumn(name="idUsuario", referencedColumnName="idusuario")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="idPerfil", referencedColumnName="idperfil")}
 * )
 */
 protected $perfiles;

/**
 * Get perfiles (getter auto generated)
 *
 * @return \Doctrine\Common\Collections\Collection 
 */
 public function getPerfiles()
 {
     return $this->perfiles;
 }

/**
 * Hook method
 */
 public function getRoles() {
     return $this->getPerfiles()->toArray();
 }

登录过程失败,显示此消息:

  

错误:在非对象

上调用成员函数getRole()

在此文件中:

  

/vendor/symfony/symfony/src/Symfony/Bundle/SecurityBundle/DataCollector/SecurityDataCollector.php   第60行

所以,检查引用的行:

  

array_map(function($ role){return $ role-> getRole();},   $令牌的> getRoles()),

并使用var_dump进行调试:

var_dump($token->isAuthenticated());
var_dump($token->getUsername());

最后一行,返回正确的数据,但在尝试时:

var_dump($token->getRoles());

var_dump显示包含错误数据的数组:

  

array(size = 2)0 => string' ccraig' (长度= 6)1 => int 3

' ccraig' string是实际用户实体实例的值,但另一个值不知道。 显然,这个值不理解" getRole"我的Perfil(Rol)实体的方法。

那么,为什么不获得真正的角色阵列? 我在其他控制器(使用相同的用户)中测试getRoles方法可以正常工作:

$doctrine = $this->getDoctrine();
$users = $doctrine->getRepository('CommonBundle:Usuario');
$user = $users->find(8);
$perfiles = $user->getPerfiles();
$out = $perfiles->getValues();
var_dump($out);

var_dump show:

array (size=2)
  0 => 
    object(AppsManantiales\CommonBundle\Entity\Perfil)[405]
      protected 'idperfil' => int 3
      protected 'nombre' => string 'ROLE_DOCENTE' (length=12)
      protected 'administrador' => boolean true
      protected 'paginaDefault' => null
  1 => 
    object(AppsManantiales\CommonBundle\Entity\Perfil)[406]
      protected 'idperfil' => int 1
      protected 'nombre' => string 'ROLE_ADMIN' (length=10)
      protected 'administrador' => boolean true
      protected 'paginaDefault' => null

任何想法?我是最新的Symfony。 谢谢!

1 个答案:

答案 0 :(得分:2)

解决方案很简单。我不应该返回一个数组o Role Object。我应该返回一个Role name(string)数组。