Symfony FOS用户包:登录/注册后凭据无效

时间:2017-12-27 22:27:47

标签: symfony fosuserbundle symfony-3.3

我使用Symfony 3.3.14和最新更新的FOS用户包。我通过/ register创建了一个用户,在重定向后我登录了。如果我退出并尝试再次登录,我会收到消息"凭证无效"。

如果我在PHP Storm中通过终端手动生成用户并在那里设置密码,则登录正常。

所以我认为问题是由寄存器造成的,我特别想在那里设置密码。

我的security.yml看起来像这样:

# To get started with security, check out the documentation:
# https://symfony.com/doc/current/security.html
security:
    encoders:
        FOS\UserBundle\Model\UserInterface: bcrypt

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: ROLE_ADMIN

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username_email

    firewalls:
        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_token_generator: security.csrf.token_manager
                # if you are using Symfony < 2.8, use the following config instead:
                # 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 }

我的config.yml:

fos_user:
    db_driver: orm # other valid values are 'mongodb' and 'couchdb'
    firewall_name: main
    user_class: AppBundle\Entity\User
    from_email:
        address: "%mailer_user%"
        sender_name: "%mailer_user%"

我的用户实体看起来像这样:

/**
 * Created by PhpStorm.
 * User: Whykiki2013
 * Date: 05.11.2017
 * Time: 00:48
 */

namespace AppBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Validator\Constraints as Assert;


/**
 * @ORM\Entity
 * @ORM\Table(name="user")
 * @UniqueEntity(fields={"email"}, message="Sie sind bereits registriert")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     */
    protected $id;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    private $gender;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    private $name;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    private $surname;

    /**
     * @ORM\Column(type="string" , nullable=true)
     */
    private $street;

    /**
     * @ORM\Column(type="string" , nullable=true)
     */
    private $zipcode;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    private $city;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    private $phone;


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

    /**
     * @return mixed
     */
    public function getGender()
    {
        return $this->gender;
    }

    /**
     * @param mixed $gender
     */
    public function setGender($gender)
    {
        $this->gender = $gender;
    }

    /**
     * @return mixed
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * @param mixed $name
     */
    public function setName($name)
    {
        $this->name = $name;
    }

    /**
     * @return mixed
     */
    public function getSurname()
    {
        return $this->surname;
    }

    /**
     * @param mixed $surname
     */
    public function setSurname($surname)
    {
        $this->surname = $surname;
    }

    /**
     * @return mixed
     */
    public function getStreet()
    {
        return $this->street;
    }

    /**
     * @param mixed $street
     */
    public function setStreet($street)
    {
        $this->street = $street;
    }

    /**
     * @return mixed
     */
    public function getZipcode()
    {
        return $this->zipcode;
    }

    /**
     * @param mixed $zipcode
     */
    public function setZipcode($zipcode)
    {
        $this->zipcode = $zipcode;
    }

    /**
     * @return mixed
     */
    public function getCity()
    {
        return $this->city;
    }

    /**
     * @param mixed $city
     */
    public function setCity($city)
    {
        $this->city = $city;
    }

    /**
     * @return mixed
     */
    public function getPhone()
    {
        return $this->phone;
    }

    /**
     * @param mixed $phone
     */
    public function setPhone($phone)
    {
        $this->phone = $phone;
    }

    public function getUsername()
    {
        return $this->email;
    }

    public function getSalt()
    {
        // TODO: Implement getSalt() method.
    }

    public function eraseCredentials()
    {
        $this->plainPassword = null;
    }




}

基本上我按照设置FOS UserBundle的步骤进行了操作:

http://symfony.com/doc/master/bundles/FOSUserBundle/index.html第2版

我认为使用编码器设置密码可能存在问题。但我无法弄清楚如何解决它。

2 个答案:

答案 0 :(得分:0)

嗯,这很奇怪。如果您从文档中执行了所有步骤,似乎您已正确配置它,因此问题可能是您确实传递了无效凭据。

你的composer.json中有fos版本~2.0吗?在master分支中,最近有一些变化可能会在symfony 3.3中出现问题。

尝试同时检查数据库中启用的字段。

顺便说一下。您不需要实现eraseCredentials和getSalt方法。它们已经在BaseUser类中实现(名称来自您的代码)。

答案 1 :(得分:0)

我不知道发生了什么变化.....现在它通过注册与两个新生成的用户合作。

之前我删除了以下几行:

public function getUsername()
{
    return $this->email;
}

public function getSalt()
{
    // TODO: Implement getSalt() method.
}

public function eraseCredentials()
{
    $this->plainPassword = null;
}

他们来自我之前构建我的User类的教程。

有趣的是:即使我将代码行粘贴回我的用户实体 - 它也在工作。

我不满意:-)它有效,但我不知道为什么......

相关问题