如何让用户在注册Django social-auth时设置用户名?

时间:2012-03-26 16:12:42

标签: django django-socialauth

我使用Django social-auth(omab版本只是为了避免与其他类似命名的项目混淆),现在我正在尝试使用Facebook。可以注册新用户并登录/注销而不会出现任何问题。我想要添加的唯一内容是注册期间的表单,让用户输入要在网站上使用的所需用户名,因为目前用户名是facebook用户名(我不想强迫用户使用相同的用户名)或者如果没有facebook用户名的uuid(那很丑)。

我正在阅读文档,管道和所有内容,但我不确定,任何提示或解释都会受到欢迎。

2 个答案:

答案 0 :(得分:2)

我在社交认证https://github.com/omab/django-social-auth/tree/master/example/app附带的示例应用中找到了它。有一个使用管道的例子,甚至是你需要实现的表单和视图。很少甚至没有必要进行任何改变以实现有效的实施。在我写这篇文章时,至少需要在表格上完成一些工作,因为你可以输入已经用过的用户名。

答案 1 :(得分:0)

接受的答案链接到整个GitHub项目,但没有解释任何与其相关的部分,其中一些已经过时,所以我会尝试分享我学到的东西。

django-social-auth已被弃用,替换为social-app-django,它将Django与python-social-auth项目集成在一起。

python-social-auth Pipelines上的文档是相关的。在默认管道中,这是生成用户名的阶段:

# Make up a username for this person, appends a random string at the end if
# there's any collision.
'social_core.pipeline.user.get_username',

implementation of get_username显示默认行为。我们将不得不复制这些方面:

  • 通过检查storage.user.user_exists(username=...)并修改用户名直到它是唯一的,确保其提供的用户名是唯一的。
  • 它返回字典{'username': '...'},它将传递给管道中的下一个阶段。

要提示用户,我们需要自定义"partial" pipeline stage。这让我们暂停管道以等待用户提交用户名表单,然后在我们拥有用户名后恢复它。