Symfony FOS用户bundle:登录 /寄存器后无效的凭据



我使用Symfony 3.3.14和最后更新的FOS用户捆绑包。我通过/寄存器创建了一个用户,重定向后,我登录了。如果我注销并尝试再次登录,我会收到消息"无效的凭据"。

如果我通过php Storm中的终端手动生成用户并在此处设置密码,则登录工作正常。

所以我认为问题是由寄存器引起的,我认为特别是将密码设置在此处。

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

# To get started with security, check out the documentation:
# https://symfony.com/doc/current/security.html
security:
    encoders:
        FOSUserBundleModelUserInterface: 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: AppBundleEntityUser
    from_email:
        address: "%mailer_user%"
        sender_name: "%mailer_user%"

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

/**
 * Created by PhpStorm.
 * User: Whykiki2013
 * Date: 05.11.2017
 * Time: 00:48
 */
namespace AppBundleEntity;
use FOSUserBundleModelUser as BaseUser;
use DoctrineORMMapping as ORM;
use SymfonyBridgeDoctrineValidatorConstraintsUniqueEntity;
use SymfonyComponentSecurityCoreUserUserInterface;
use SymfonyComponentValidatorConstraints as Assert;

/**
 * @ORMEntity
 * @ORMTable(name="user")
 * @UniqueEntity(fields={"email"}, message="Sie sind bereits registriert")
 */
class User extends BaseUser
{
    /**
     * @ORMId
     * @ORMGeneratedValue(strategy="AUTO")
     * @ORMColumn(type="integer")
     */
    protected $id;
    /**
     * @ORMColumn(type="string", nullable=true)
     */
    private $gender;
    /**
     * @ORMColumn(type="string", nullable=true)
     */
    private $name;
    /**
     * @ORMColumn(type="string", nullable=true)
     */
    private $surname;
    /**
     * @ORMColumn(type="string" , nullable=true)
     */
    private $street;
    /**
     * @ORMColumn(type="string" , nullable=true)
     */
    private $zipcode;
    /**
     * @ORMColumn(type="string", nullable=true)
     */
    private $city;
    /**
     * @ORMColumn(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

我认为使用编码器设置密码可能存在问题。但是我不知道如何修复它。

mmm这很奇怪。如果您从文档中执行了所有步骤,看来您已经正确配置了它,因此问题可能是您确实通过了无效的凭据。

您的Composer.json中是否有FOS版本〜2.0?在主人分支中,最近有一些变化可以在Symfony 3.3中引起问题。

尝试在数据库中检查启用字段。

顺便说一句。您不需要实现erasecredentials和getalt的方法。它们已经在baseuser类中为您实施(名称来自您的代码)。

我不知道发生了什么变化.....现在它通过寄存器与两个新生成的用户一起使用。

在我删除以下行之前说的那样:

public function getUsername()
{
    return $this->email;
}
public function getSalt()
{
    // TODO: Implement getSalt() method.
}
public function eraseCredentials()
{
    $this->plainPassword = null;
}

他们来自一个教程,我以前构建了用户课程。

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

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

最新更新