如何使用分隔的密码实体来防止用户使用旧密码更新密码

时间:2019-04-14 00:08:13

标签: symfony authentication

我想通过将密码与用户实体分开来创建自定义身份验证系统。每个用户可以有一个以上的密码,并且使用了最新的密码。当用户尝试更新密码时,我想防止他使用旧的密码,如链接下面的链接所述。 请我需要您的帮助,谢谢。
Edit Search For User

1 个答案:

答案 0 :(得分:0)

对我来说,这不是定制的身份验证系统,您只需要更改方法getPassword的主体。您将在下面找到一个示例。

password.php

<?php

namespace your\name\space;


use Doctrine\ORM\Mapping as ORM;
use DateTime;

class Password
{
    /**
     * @ORM\ManyToOne(targetEntity="your\name\space\User", inversedBy="passwords")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
     *
     * @var User
     */
    private $user;

    /**
     * @ORM\Column(name="inserted_at", type="datetime")
     * 
     * @var DateTime
     */
    private $insertedAt;
}

User.php

<?php

namespace your\name\space;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;

class User implements UserInterface
{

    /**
     * @ORM\OneToMany(targetEntity="your\name\space\Password", mappedBy="user")
     * @ORM\OrderBy(value={"insertedAt" = "DESC"})
     *
     * @var Collection
     */
    private $passwords;

    /**
     * User constructor.
     */
    public function __construct()
    {
        $this->passwords = new ArrayCollection();
    }

    /**
     * {@inheritDoc}
     */
    public function getPassword()
    {
        if ($this->passwords->isEmpty()) {
            return null;
        }

        return $this->passwords->first();
    }
}