【问题标题】:Django Allauth how to change username=first_name?Django Allauth 如何更改用户名=first_name?
【发布时间】:2014-06-17 14:38:35
【问题描述】:

使用 django allauth 进行社交帐户注册时,allauth 会自动将用户名定义为从 3rdparty 获取的 first_name。因此,例如:如果 facebooks John Cucumber 注册,他将获得用户名“john”。我想把它改成“约翰黄瓜”。使用他的名字和姓氏作为用户名。在文档中没有看到任何关于此的内容。

谢谢

编辑:更多解释:

  1. 匿名不是默认的 我试图实现默认用户不是匿名的(使用昵称)。他们有能力将用户名更改为昵称,但只有在完全注册后,默认情况下他们使用社交网络的全名。

  2. 注册很快(没有表格) 我还想让他们注册并快速登录(这就是为什么我首先使用社交网络登录,单击一下,您就是我页面的用户)。所以,我不想用注册表来打扰用户。正如安德鲁在下面的帖子中指出的那样 当前的 allauth 设置会导致许多名称冲突(可能只有一个 John,所有其他人都需要更改他们的用户名)。与全名相比,与名字的冲突将更少。但这是我稍后会追求的,一旦这个问题解决了。

【问题讨论】:

  • 据我在文档中看到的是:ACCOUNT_USERNAME_REQUIRED 其中:The user is required to enter a username when signing up. Note that the user will be asked to do so even if ACCOUNT_AUTHENTICATION_METHOD is set to email. Set to False when you do not wish to prompt the user to enter a username.
  • 我知道这一点,但我希望用户拥有一个用户名。感谢您的回复。
  • Allauth 有一个 extract_common_fields 方法,也许你可以使用它并覆盖数据库中的保存(可能使用 pre_save 信号),抱歉没有使用 allauth 所以我不熟悉是否有函数覆盖用户创建。

标签: django django-allauth


【解决方案1】:

我认为您的用户很快就会开始看到与生成的用户名的冲突。只要你有多个“John Smith”,那么你就会遇到问题。

此外,许多用户可能不希望将全名用作用户名。

就个人而言,我总是使用电子邮件登录,从不使用用户名,但如果您坚持使用它,我建议您显示一个允许选择用户名的表单,并将默认设置为 "%s %s" % (first_name, last_name) 或类似名称。

为确保显示表单,请编辑设置:

SOCIALACCOUNT_AUTO_SIGNUP = False  # require social accounts to use the signup form

来自documentation

[如果为真] 尝试通过使用字段(例如用户名、 电子邮件)从社交帐户提供商处检索。如果发生冲突 由于重复的电子邮件地址而出现的注册表单仍将 开始吧。

您应该能够在呈现表单之前使用挂钩来提供建议的用户名。

使用 Twitter Bootstrap 的 django-allauth 的工作示例*位于 https://github.com/aellerton/demo-allauth-bootstrap。但是,它确实使用用户名,但它确实在社交注册后显示了注册表单。

*免责声明:我写了这个例子。

【讨论】:

  • 安德鲁感谢您的努力,我也一直在考虑这个替代方案,但这不是我想要的。我不想为用户名显示任何注册表单,如果用户必须输入所有内容,社交帐户注册对我来说会失去意义。此外,匿名应该是可选的,而不是该页面上的默认设置,因此默认全名作为用户名,如果用户不舒服,请更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
  • 2019-02-06
相关资源
最近更新 更多