django-social-auth、django-registration和django-profiles -- 一起使用

20
有人一起使用过 django-social-auth, django-registrationdjango-profiles 吗?它们能很好地一起工作吗?我已经建立了 social-auth,但我在某个地方读到 django-allauth 更好。我应该转换到那个吗?
请给予建议。
更新:
我在我的项目中使用了 allauth,它运行良好。你不需要与 allauth 一起使用 django-registration,因为它已经集成在其中了。然而,我正在使用自定义用户资料,这比 django-profiles 更好。
1个回答

34
他们一起很好用 - 我前几天刚设置好(除了我不需要使用django-profiles,因为自己创建也很容易)。
  • 用户可以使用django-registration设置普通帐户(contrib.auth),该帐户会发送确认电子邮件,以在DB中创建用户名/电子邮件/密码。
  • 或者,他们可以立即通过Twitter / Facebook / Google等登录,并自动为他们创建contrib.auth用户,其中包含虚拟密码(可能没有电子邮件)。

一些要点和限制:

  • 当您使用社交媒体配置文件登录时,将自动创建contrib.auth.user。如果该用户名已存在,则会附加UUID - 这很丑陋,而django-social-auth似乎尚未解决此问题 - 一个简单的解决方案是允许用户在注册后更改用户名。理想情况下,当您使用Twitter登录时,您有机会在保存到DB之前完善详细信息(而不是之后)
  • 类似地,设置了虚拟密码 - 这使得难以使用内置的django密码更改表单允许用户重置密码,因为他们将无法输入其现有密码(因为它被设置为不可散列的字符串)
  • 您需要考虑以Twitter注册的用户稍后想要关联其Facebook帐户的情况 - django-social-auth考虑到了这一点,很容易将多个第三方登录与一个帐户关联
  • Twitter不会透露用户的电子邮件地址,因此您可能希望提示他们向您提供该信息并将其保存到数据库中 - 但问题是您随后将需要验证它,这使得使用social-auth的整个目的都失去了意义!
django-social-auth是一个很棒的项目,正在积极开发中,有一个Google Group组,始终保持最新状态,所以我一定会建议使用它。而且安装非常容易 - 只要确保您已经解决了登录流程,并知道使用它的潜在限制

编辑:

这篇文章有点过时了

  • django-social-auth已成为python-social-auth
  • django-allauth:OP提到了django-allauth,最近变得越来越受欢迎。我没有使用过,但它似乎是一个很好的认证、注册和配置文件的替代品。
  • 可配置的用户模型:Django 1.5在auth模块中引入了configuratble User models,因此您现在可以编辑要使用的用户字段(仅电子邮件,没有用户名等)。如果您想向用户添加类似配置文件的信息,而不必加入另一个表(例如django-profiles或自定义配置文件模型的OneToOne关系),这也非常有用。

非常感谢您详尽的回复。实际上,我希望在稍后的时间获取用户的电子邮件地址,但是对于第一次,我希望用户能够立即开始使用。当他们访问需要电子邮件的功能时,我可以随时要求他们提供电子邮件地址。此外,当他们构建自己的个人资料时,他们将填写电子邮件地址。我不希望他们在第一次使用时感到受挫。 - Sachin
2
其次,关于密码问题有什么可以做的吗?您说我们可以将多个社交登录关联到同一个帐户吗?此外,由于我是Django的新手,我在模板方面遇到了一些麻烦,您能指导我一些如何制作模板的好教程吗?或者一个同时具有社交登录和本地注册的良好登录表单应该是什么样子的...另外非常感谢。 - Sachin
social-auth的作者创建了一个示例页面,您可以在此登录并关联多个服务:http://social.matiasaguirre.net/。我还没有研究密码问题,但我相信通过使用自定义视图而不是默认的django change_password表单可以轻松解决。如果您通过我的个人资料中列出的电子邮件给我发送电子邮件,我将向您发送来自类似项目的模板。 - Timmy O'Mahony
感谢您的所有帮助。我已经发送了一封电子邮件到您网站上列出的账户。谢谢。 - Sachin
我正在尝试使用共存的django-registration和django-social-auth系统。如果出于安全问题而禁用'social_auth.backends.pipeline.associate.associate_by_email'中间件,是否会禁用django-registration? - Marc Condon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接