symfony2 FOSUserBundle登录返回';凭据不正确';


symfony2 FOSUserBundle login returns 'bad credentials'

我是FOSUserBundle的新手,几个小时以来我一直在努力解决这个错误。。。在网站上找不到合适的答案。

有人能帮我吗

这是我的子用户实体

<?php
// src/Blogger/BlogBundle/Entity/CommonUser.php
namespace Blogger'BlogBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
use Doctrine'Common'Collections'ArrayCollection;
use FOS'UserBundle'Model'User as BaseUser;

/**
 * @ORM'Entity(repositoryClass="Blogger'BlogBundle'Entity'Repository'CommonUserRepository")
 * @ORM'Table(name="CommonUser")
 * @ORM'HasLifecycleCallbacks
 */
class CommonUser extends BaseUser
{
    /**
     * @ORM'OneToMany(targetEntity="Request", mappedBy="commonUser")
     */
    protected $requests;

    public function __construct()
    {
        parent::__construct();
        $this->requests = new ArrayCollection();

    }

    /**
     * @ORM'Id
     * @ORM'Column(type="integer", nullable=false)
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    protected $id;

...
...
...
    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    public function getSalt()
    {
        return '';
    }
...
}

这也是request.php类

<?php
// src/Blogger/BlogBundle/Entity/Request.php
namespace Blogger'BlogBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
use Doctrine'Common'Collections'ArrayCollection;
use Blogger'BlogBundle'Entity'Repository'RequestRepository;
/**
 * @ORM'Entity(repositoryClass="Blogger'BlogBundle'Entity'Repository'requestRepository")
 * @ORM'Table(name="request")
 * @ORM'HasLifecycleCallbacks
 */
class Request
{
    /**
     * @ORM'OneToMany(targetEntity="Note", mappedBy="request")
     */
    protected $notes;
    public function __construct()
    {
        $this->notes = new ArrayCollection();

        $this->setCreated(new 'DateTime());
        $this->setUpdated(new 'DateTime());
    }
    /**
     * @ORM'Id
     * @ORM'Column(type="integer")
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    protected $id;
    /**
     * @ORM'ManyToOne(targetEntity="CommonUser", inversedBy="requests")
     * @ORM'JoinColumn(name="user_id", referencedColumnName="id")
     */
    protected $commonUser;
    /**
     * @ORM'Column(type="text")
     */
    protected $request;
    ....
    ....
    ....

    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }
    ....
    ....
    ....
}

这是我的安全文件

# app/config/security.yml
security:
    encoders:
        FOS'UserBundle'Model'UserInterface: sha512
    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: ROLE_ADMIN
    providers:
        fos_userbundle:
            id: fos_user.user_provider.username
    firewalls:
        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_provider: form.csrf_provider
            logout:       true
            anonymous:    true
    access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/, role: ROLE_ADMIN }

当您从FOSUserBundle向提供的控制器注册时,存储在DB中的密码将使用500倍的SHA1和随机生成的salt进行加密。因此,如果您总是通过函数getSalt()返回",密码将永远不会匹配不要覆盖此功能

但是,您可以覆盖FOSUserBundle中的控制器,有关详细信息,请参阅官方文档。

public function getSalt()
{
    return '';
}

只需尝试更新密码即可。在终端中输入:

php fos:user:change-password $username $password

其中CCD_ 2是用户名,CCD_。