django-allauth:如何仅在电子邮件验证后将用户设置为活动状态

2023-12-31

我主要使用 django-allauth 作为为管理后端创建用户帐户的方式。我希望发生的是:

1)当用户完成注册过程时,发送验证电子邮件(到目前为止我已经这样做了)并将用户设置为非活动,员工,并默认分配给他们“SurveyManager”组。目前,创建的用户的 active 设置为 true,staff 设置为 false,并且未分配任何组。

2)单击电子邮件中的链接以验证其地址后,我希望将用户设置为活动状态,以便他们可以通过管理后端登录。

我的具体问题是我不知道:1)如何或在哪里设置用户的活动、工作人员和组的默认值——我想这将在 models.py 文件中完成,但我的理解是用户模型包含在 auth 应用程序中; 2) 一旦电子邮件验证完成,如何触发代码将用户活动标志更改为 true。

预先感谢 - 抱歉,如果这是一篇创作不佳的帖子,这是我的第一篇!


我似乎(大部分)通过使用信号解决了我的问题。这个帖子 https://stackoverflow.com/questions/15122895/create-user-inactive-as-default-is-active-default-false给了我这个想法(但不幸的是没有提供任何代码示例),而这个网站 http://birdhouse.org/blog/2013/12/03/django-allauth-retrieve-firstlast-names-from-fb-twitter-google/comment-page-1/给了我一些需要修改的实际具体示例(我发现这是 Django 世界中的稀有商品)。

我最终将以下代码放入页面的 view.py 文件中——我知道建议使用 models.py 作为信号,但所使用的模型实际上来自 allauth 包:

from allauth.account.signals import user_signed_up, email_confirmed
from django.dispatch import receiver
from django.contrib.auth.models import Group
from django.contrib.auth.models import User
from allauth.account.models import EmailAddress

@receiver(user_signed_up)
def user_signed_up_(request, user, **kwargs):

    user.is_active = False
    user.is_staff = True
    Group.objects.get(name='SurveyManager').user_set.add(user)

    user.save()

@receiver(email_confirmed)
def email_confirmed_(request, email_address, **kwargs):

    new_email_address = EmailAddress.objects.get(email=email_address)
    user = User.objects.get(new_email_address.user)
    user.is_active = True

    user.save()

唯一还没有完全工作的是 email_confirmed 信号处理——它声称“EmailAddress 匹配查询不存在”,当它在数据库条目中明显匹配时,但我会继续并将其发布在一个单独的问题 https://stackoverflow.com/questions/24809505/django-allauth-how-to-properly-use-email-confirmed-signal-to-set-user-to-active.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

django-allauth:如何仅在电子邮件验证后将用户设置为活动状态 的相关文章

随机推荐