简体   繁体   中英

symfony2 FOSUserBundle login returns 'bad credentials'

I'm new to FOSUserBundle and it's some hours that i'm struggling with this error...and can't find appropriate answer in the site.

can anyone help me plz?:-*

this is my child user entity

<?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 '';
    }
...

}

and also this is the request.php class

<?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;
    }

    ....
    ....
    ....
}

and this is my security file

# 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 }

When you register with the provided controller from FOSUserBundle the password stored in DB is encrypted with 500 times SHA1 and the random generated salt. So if you always return "" by the function getSalt() the password will never match. do not override this function.

you can however overwrite the Controllers in FOSUserBundle, more about that in the offical documentation .

public function getSalt()
{
    return '';
}

Just try to update the password. In the terminal enter:

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

where $user is the user name and $password the new password.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM