我想通过将密码与用户实体分开来创建自定义身份验证系统。每个用户可以有一个以上的密码,并且使用了最新的密码。当用户尝试更新密码时,我想防止他使用旧的密码,如链接下面的链接所述。
请我需要您的帮助,谢谢。
答案 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();
}
}