在Symfony2.3中,我有一个用户实体(我使用doctrine),其中用户名不是唯一的,但密码是。如何实现登录系统。据我所知,Symfony2使用loadUserByUsername(),我想要一个loadUserByPassword()。
我对如何做的任何想法。我尝试过自定义用户提供程序和实体提供程序,但我无法找到可以获取用户密码的位置并搜索数据库。
感谢您的帮助。
编辑:
我将尝试更详细地解释该场景。 我有一些管理员以正常的FosUser方式使用FosUserBundle登录。这些管理员可以创建一些调查,他们可以使用用户名和密码创建一些受访者来回答调查。管理员可以访问密码,因此他可以通过邮件或讲义将其提供给受访者(我不能依赖所有受访者都有电子邮件)。
管理员必须能够访问密码,以便将它们保存为数据库中的纯文本。管理员甚至可以将调查作为纸质印刷品提供给受访者,并为受访者输入答案。
调查的想法是管理员可以要求用户再次回答调查,以便他们可以在一段时间内讨论答案的变化。这是对进展的一种监控。
@Pierre建议使用一些“邀请码”这个想法是我没想过的。我会调查一下,看看我是否可以使用它。重要的是建立一个系统,管理员可以确保他可以让受访者访问调查(使用登录信息),不止一次,这样他们就可以比较答案中的差异。
@ andrzej-osmialowski问我对自定义用户类的意思。我创建了一个实体,用于将所有响应者保存到数据库中(请参阅下面的代码)。在我的security.yml中,我有两个提供者,一个用于使用infoClient类的响应者,另一个用于管理员(FosUserBundle)。
我希望你能给我一些想法。
class infoClient implements AdvancedUserInterface, Serializable, EquatableInterface
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @Assert\NotBlank(groups={"registration"},message = "Respondenten skal have et fornavn")
* @ORM\Column(type="string", nullable=false)
*/
private $firstName;
/**
* @ORM\Column(type="string", nullable=true)
*/
private $lastName;
/**
* @var string $email
* @Assert\Email()
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $email;
/**
* @var bool
*
* @ORM\Column(type="boolean", nullable=false)
*/
private $isActive = true;
/**
* @ORM\Column(type="string", nullable=false)
*/
private $salt;
/**
* @ORM\Column(type="string", nullable=false)
*/
private $password;
/**
* @ORM\Column(type="string", nullable=false, unique = true)
*/
private $plainPassword;
/**
* @var string $username
* @Assert\NotBlank(groups={"registration"},message = "Respondenten skal have et brugernavn")
*
* @ORM\Column(type="string", length=255, nullable=false)
*/
private $username;
/**
* @ORM\Column(type="date", nullable=true)
*/
private $borndate;
/**
* @ORM\Column(type="string", nullable=true)
*/
private $group_identity;
/**
* @ORM\Column(type="array");
*/
private $roles = array();
/**
* @ORM\Column(type="datetime", nullable=false)
* @Gedmo\Timestampable(on="create")
*/
private $created;
/**
* @ORM\Column(type="datetime", nullable=false)
* @Gedmo\Timestampable(on="update")
*/
private $updated;
/**
* @ORM\OneToMany(targetEntity="Dhsf\AnswerBundle\Entity\Answer", mappedBy="infoClient",cascade={"persist"})
*/
private $answers;
div. getters and setters
}