Symfony2:如何只通过密码登录

时间:2014-02-01 18:08:30

标签: php symfony

在Symfony2.3中,我有一个用户实体(我使用doctrine),其中用户名不是唯一的,但密码是。如何实现登录系统。据我所知,Symfony2使用loadUserByUsername(),我想要一个loadUserByPassword()。

我对如何做的任何想法。我尝试过自定义用户提供程序和实体提供程序,但我无法找到可以获取用户密码的位置并搜索数据库。

感谢您的帮助。

关心Niels

编辑:

我将尝试更详细地解释该场景。 我有一些管理员以正常的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

}

0 个答案:

没有答案
相关问题