Symfony2 - 无法登录(用户存储库)

时间:2012-11-09 12:44:44

标签: php security symfony yaml

我有点问题...... 载着Symfony2的手册,现在我陷入了自己的记录:s

这位新手欢迎任何帮助。 所以这是我的用户实体:

<?php

namespace SocialGeo\BackendBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\EquatableInterface; 
use Symfony\Component\Security\Core\User\AdvancedUserInterface;
use Doctrine\Common\Collections\ArrayCollection;
/**
* SocialGeo\BackendBundle\Entity\Users
*/
class Users implements AdvancedUserInterface
{
/**
 * @var integer $userId
 */
private $userId;

/**
 * @var string $username
 */
private $username;

/**
* @ORM\Column(type="string", length=60)
*/
private $salt;

/**
 * @var string $userPassword
 */
private $userPassword;

/**
 * @var string $userEmail
 */
private $userEmail;

/**
 * @var boolean $userActive
 */
private $userActive;

/**
 * @var string $userFavourites
 */
private $userFavourites;

/**
 * @var integer $userScore
 */
private $userScore;

/**
 * @var \Doctrine\Common\Collections\ArrayCollection
 */
private $rolesRole;


/**
 * Constructor
 */
public function __construct()
{
    $this->rolesRole = new ArrayCollection();
    $this->salt = md5(uniqid(null, true));
}

/**
 * Get userId
 *
 * @return integer 
 */
public function getUserId()
{
    return $this->userId;
}

/**
 * Set username
 *
 * @param string $username
 * @return Users
 */
public function setUsername($username)
{
    $this->username = $username;

    return $this;
}

/**
 * Get username
 *
 * @return string 
 */
public function getUsername()
{
    return $this->username;
}

/**
 * Set userPassword
 *
 * @param string $userPassword
 * @return Users
 */
public function setUserPassword($userPassword)
{
    $this->userPassword = $userPassword;

    return $this;
}

/**
 * Get userPassword
 *
 * @return string 
 */
public function getUserPassword()
{
    return $this->userPassword;
}

/**
 * Set userEmail
 *
 * @param string $userEmail
 * @return Users
 */
public function setUserEmail($userEmail)
{
    $this->userEmail = $userEmail;

    return $this;
}

/**
 * Get userEmail
 *
 * @return string 
 */
public function getUserEmail()
{
    return $this->userEmail;
}

/**
 * Set userActive
 *
 * @param boolean $userActive
 * @return Users
 */
public function setUserActive($userActive)
{
    $this->userActive = $userActive;

    return $this;
}

/**
 * Get userActive
 *
 * @return boolean 
 */
public function getUserActive()
{
    return $this->userActive;
}

/**
 * Set userFavourites
 *
 * @param string $userFavourites
 * @return Users
 */
public function setUserFavourites($userFavourites)
{
    $this->userFavourites = $userFavourites;

    return $this;
}

/**
 * Get userFavourites
 *
 * @return string 
 */
public function getUserFavourites()
{
    return $this->userFavourites;
}

/**
 * Set userScore
 *
 * @param integer $userScore
 * @return Users
 */
public function setUserScore($userScore)
{
    $this->userScore = $userScore;

    return $this;
}

/**
 * Get userScore
 *
 * @return integer 
 */
public function getUserScore()
{
    return $this->userScore;
}

/**
 * Add rolesRole
 *
 * @param SocialGeo\BackendBundle\Entity\Roles $rolesRole
 * @return Users
 */
public function addRolesRole(\SocialGeo\BackendBundle\Entity\Roles $rolesRole)
{
    $this->rolesRole[] = $rolesRole;

    return $this;
}

/**
 * Remove rolesRole
 *
 * @param SocialGeo\BackendBundle\Entity\Roles $rolesRole
 */
public function removeRolesRole(\SocialGeo\BackendBundle\Entity\Roles $rolesRole)
{
    $this->rolesRole->removeElement($rolesRole);
}

/**
 * Get rolesRole
 *
 * @return Doctrine\Common\Collections\Collection 
 */
public function getRolesRole()
{
    return $this->rolesRole->toArray();
}

public function eraseCredentials() 
{

}

public function getPassword() 
{
    return $this->userPassword;
}

public function getRoles() 
{
    //return $this->groups->toArray();
    return $this->getRolesRole();
}

public function getSalt() 
{
    return $this->salt;
}
public function isEqualTo(UserInterface $users)
{
    return $this->username === $users->getUsername();
}

public function isAccountNonExpired() {
    return true;
}

public function isAccountNonLocked() {
    return true;
}

public function isCredentialsNonExpired() {
    return true;
}

public function isEnabled() {
    return $this->userActive;
}
}

我的角色实体:

<?php

namespace SocialGeo\BackendBundle\Entity;

use Symfony\Component\Security\Core\Role\RoleInterface;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;

/**
 * SocialGeo\BackendBundle\Entity\Roles
 */
class Roles implements RoleInterface
{
/**
 * @var integer $roleId
 */
private $roleId;

/**
 * @var string $roleName
 */
private $roleName;

/**
* @ORM\Column(name="role", type="string", length=20, unique=true)
*/
private $role;

/**
 * @var string $roleDescription
 */
private $roleDescription;

/**
 * @var \Doctrine\Common\Collections\ArrayCollection
 */
private $usersUser;

/**
 * Constructor
 */
public function __construct()
{
    $this->usersUser = new ArrayCollection();
}

/**
 * Get roleId
 *
 * @return integer 
 */
public function getRoleId()
{
    return $this->roleId;
}

/**
 * Set roleName
 *
 * @param string $roleName
 * @return Roles
 */
public function setRoleName($roleName)
{
    $this->roleName = $roleName;

    return $this;
}

/**
 * Get roleName
 *
 * @return string 
 */
public function getRoleName()
{
    return $this->roleName;
}

/**
 * Set roleDescription
 *
 * @param string $roleDescription
 * @return Roles
 */
public function setRoleDescription($roleDescription)
{
    $this->roleDescription = $roleDescription;

    return $this;
}

/**
 * Get roleDescription
 *
 * @return string 
 */
public function getRoleDescription()
{
    return $this->roleDescription;
}

/**
 * Add usersUser
 *
 * @param SocialGeo\BackendBundle\Entity\Users $usersUser
 * @return Roles
 */
public function addUsersUser(\SocialGeo\BackendBundle\Entity\Users $usersUser)
{
    $this->usersUser[] = $usersUser;

    return $this;
}

/**
 * Remove usersUser
 *
 * @param SocialGeo\BackendBundle\Entity\Users $usersUser
 */
public function removeUsersUser(\SocialGeo\BackendBundle\Entity\Users $usersUser)
{
    $this->usersUser->removeElement($usersUser);
}

/**
 * Get usersUser
 *
 * @return Doctrine\Common\Collections\Collection 
 */
public function getUsersUser()
{
    return $this->usersUser;
}

public function getRole() {
    return $this->role;
}
}

userrepository entity:

<?php

namespace SocialGeo\BackendBundle\Entity;

use Symfony\Component\Security\Core\Role\RoleInterface;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;

/**
 * SocialGeo\BackendBundle\Entity\Roles
 */
class Roles implements RoleInterface
{
/**
 * @var integer $roleId
 */
private $roleId;

/**
 * @var string $roleName
 */
private $roleName;

/**
* @ORM\Column(name="role", type="string", length=20, unique=true)
*/
private $role;

/**
 * @var string $roleDescription
 */
private $roleDescription;

/**
 * @var \Doctrine\Common\Collections\ArrayCollection
 */
private $usersUser;

/**
 * Constructor
 */
public function __construct()
{
    $this->usersUser = new ArrayCollection();
}

/**
 * Get roleId
 *
 * @return integer 
 */
public function getRoleId()
{
    return $this->roleId;
}

/**
 * Set roleName
 *
 * @param string $roleName
 * @return Roles
 */
public function setRoleName($roleName)
{
    $this->roleName = $roleName;

    return $this;
}

/**
 * Get roleName
 *
 * @return string 
 */
public function getRoleName()
{
    return $this->roleName;
}

/**
 * Set roleDescription
 *
 * @param string $roleDescription
 * @return Roles
 */
public function setRoleDescription($roleDescription)
{
    $this->roleDescription = $roleDescription;

    return $this;
}

/**
 * Get roleDescription
 *
 * @return string 
 */
public function getRoleDescription()
{
    return $this->roleDescription;
}

/**
 * Add usersUser
 *
 * @param SocialGeo\BackendBundle\Entity\Users $usersUser
 * @return Roles
 */
public function addUsersUser(\SocialGeo\BackendBundle\Entity\Users $usersUser)
{
    $this->usersUser[] = $usersUser;

    return $this;
}

/**
 * Remove usersUser
 *
 * @param SocialGeo\BackendBundle\Entity\Users $usersUser
 */
public function removeUsersUser(\SocialGeo\BackendBundle\Entity\Users $usersUser)
{
    $this->usersUser->removeElement($usersUser);
}

/**
 * Get usersUser
 *
 * @return Doctrine\Common\Collections\Collection 
 */
public function getUsersUser()
{
    return $this->usersUser;
}

public function getRole() {
    return $this->role;
}
}

和最后一个:security.yml:

security:
 encoders:
    SocialGeo\BackendBundle\Entity\Users:
        algorithm: sha1
        encode_as_base64: false
        iterations: 1 

 role_hierarchy:
    ROLE_ADMIN: ROLE_USER
    ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ]

 providers:
  users:
    entity: { class: SocialGeoBackendBundle:Users }

 firewalls:
    admin_area:
        pattern: ^/users
        http_basic: ~

 access_control:
    - { path: ^/login, roles: ROLE_ADMIN }

问题是我的应用程序一直要求我每次登录,但我无法进入(每次都进入/用户页面)。家是可以访问的。

所以,当我去/用户一个基本的http:从浏览器中弹出并询问我的凭据,当我填写并按回车时,我得到相同的浏览器弹出窗口,要求我登录..

编辑:我在evey用户数据库中的盐是:7308e59b97f6957fb42d66f894793079 并且我的每个用户的密码都是'pass'哈希,sha1为:9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684

1 个答案:

答案 0 :(得分:0)

您的密码未正确哈希。您应该将盐与明文密码一起使用。在对其进行哈希处理之前,请尝试使用盐为密码添加前缀。

update users set password = sha1(concat('7308e59b97f6957fb42d66f894793079', 'pass'))