【问题标题】:Django-allauth with multiple profile models具有多个配置文件模型的 Django-allauth
【发布时间】:2013-07-31 06:39:37
【问题描述】:

我有一个 django 项目,其中有多个配置文件模型,每个模型都有一个用户模型的外键。它使用django-allauth 进行注册。

目前,当使用社交帐户注册时,用户注册,创建一个用户和一个社交帐户,然后将用户重定向到要填写的表单,具体取决于他/她之前选择的个人资料类型,以及填写后该表单是创建的正确配置文件类型。

如果用户、社交帐户和个人资料类型实例是在同一步骤中创建的,即在用户填写个人资料特定表单之后,我希望这样做。无论如何我可以在不更改allauth's 代码的情况下做到这一点吗?通过修改 allauth 来做到这一点并不会太难,但如果可以提供帮助,我宁愿不维护 3rd 方应用程序的自定义副本。

使用自定义适配器被淘汰了,因为它无权访问请求。

【问题讨论】:

  • 如果答案令人满意,如果您接受它会有所帮助。如果没有,请发表评论,以便我们找出正确的答案。
  • 抱歉。一直有点忙,回复的答案从我的脑海中溜走

标签: django django-allauth


【解决方案1】:

查看allauth.account.signals.user_signed_up 信号,该信号在用户(社交或普通用户)注册后触发。您可以在那里使用您的帐户做您的事情:

from django.dispatch import receiver
from allauth.account.signals import user_signed_up

@receiver(user_signed_up)
def do_stuff_after_sign_up(sender, **kwargs):
    request = kwargs['request']
    user = kwargs['user']
    # Do your stuff with the user
    user.save()

来自django-allauth repo

# Typically followed by `user_logged_in` (unless, e-mail verification kicks in)
user_signed_up = Signal(providing_args=["request", "user"])

要了解如何在 django 中使用信号,请阅读the official documentation about it

希望对你有帮助!

编辑

很高兴您找到了解决问题的方法,但是由于始终加载中间件,因此我建议您使用我提出的方法。来自django-allauthsocialaccount 模块也提供signals。其中,你可以找到allauth.socialaccount.signals.social_account_added

# Sent after a user connects a social account to a his local account.
social_account_added = Signal(providing_args=["request", "sociallogin"])

使用与之前编写的类似的处理程序,您可以检查用户模型的必填字段,然后调用redirect 快​​捷方式,或返回重定向到显示/处理表单的视图的HttpResponseRedirect 对象.

【讨论】:

  • 这对我们不起作用,因为我们需要用户在社交注册后填写表格。我们所做的是创建了一个自定义中间件,它将任何尚未填写该表单的用户重定向到表单页面。
  • @elssar:我编辑了答案,希望它有用。问候。
  • 感谢您的编辑。将用户重定向到适当的表单不是问题。问题是如果他们不填写该表格会发生什么。他们仍然可以登录并浏览该站点。我们不希望个人资料不完整的用户这样做。
  • 这证明加载中间件是合理的。在那种情况下,我也会使用你的方法。
  • @elssar 您介意分享您的自定义中间件吗?我们遇到了同样的问题(多个配置文件模型),很想看看您是如何做到的。谢谢
猜你喜欢
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
  • 2017-05-31
  • 2013-05-24
  • 2019-11-02
  • 1970-01-01
  • 2016-11-06
  • 1970-01-01
相关资源
最近更新 更多