通过在FOSuserBundle中注册来避免用户名

时间:2013-09-11 19:09:14

标签: symfony fosuserbundle

当我尝试注册两个具有相同名称的用户时。我得到的信息是fosbundle已存在此名称。我的问题是如何避免这种情况?

2 个答案:

答案 0 :(得分:1)

根据您的评论判断,我认为您将用户名与姓氏和名字混淆。您的用户可能具有相同的名字和姓氏,但他们的用户名不能相同。 FOSUserBundle使用用户名/密码组合来验证用户。通过某些配置,您可以允许用户使用电子邮件/密码登录,甚至使用电子邮件作为用户名。

在任何情况下,用户名应保持唯一。如果您正确配置了FOSUserBundle,则应该拥有自己的用户实体类,该类可以从捆绑包中扩展用户实体。这是您添加其他字段的位置,例如名字和姓氏,等等。

答案 1 :(得分:0)

如果您想允许多个用户拥有相同的用户名,您需要做的是覆盖FOSUserBundle控制器并在注册页面中设置一个新字段。我建议删除“用户名”字段并创建新的“名称”属性。

所以添加一个名为'user_name'的名称,其作用方式与名字和姓氏相同。从注册表单中删除用户名字段,因为它必须是唯一的。

您可以在此处了解详情:http://symfony.com/doc/current/bundles/FOSUserBundle/overriding_forms.html

使用FOSUserBundle创建用户时,他们必须使用用户名,电子邮件和密码。因为您已删除了用户名字段,所以我只是将电子邮件复制为用户名(因为您至少需要一个唯一的字段)。

如果您覆盖登录表单以便仅检查用于验证的电子邮件和密码而不是用户名/电子邮件和密码,则它应该为您提供所需的仅通过电子邮件和密码登录的功能。用户名也将是他们的电子邮件。

覆盖表单与股票注册表单时新注册页面的示例

旧:

Email: email@address.com
Username: uniquename
Password: xxxxxxx
Repeat password: xxxxxxx

新:

Email: email@address.com
User_name: duplicatesallowed
Password: xxxxxxx
Repeat password: xxxxxxx

修改控制器,使user.username获取user.email的值(因为电子邮件将是唯一的)。