当我尝试注册两个具有相同名称的用户时。我收到该名称已经存在于 fosbundle 的消息。我的问题是如何避免这种情况?
2 回答
从您的评论来看,我相信您将用户名与名字和姓氏混淆了。您的用户可能有相同的名字和姓氏,但他们不能有相同的用户名。FOSUserBundle 使用用户名/密码组合来验证用户。通过一些配置,您可以允许用户使用电子邮件/密码登录,甚至使用电子邮件作为用户名。
在任何情况下,用户名都应该保持唯一。如果您正确配置了 FOSUserBundle,您应该拥有自己的用户实体类,该类从包中扩展用户实体。您可以在此处添加其他字段,例如名字和姓氏等。
如果您想允许多个用户拥有相同的用户名,您需要做的是覆盖 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 的值(因为电子邮件将是唯一的)。