django allauth:如何仅在电子邮件验证后将用户设置为活动
我使用django allauth主要是为了为管理后端创建用户帐户。我希望发生的是: 1) 当用户完成注册过程时,发送验证电子邮件(到目前为止我一直在工作),并将该用户设置为非活动、staff,以及defult分配给他们的“SurveyManager”组。当前,创建用户时,active设置为true,staff设置为false,并且未分配任何组 2) 单击他们电子邮件中的链接以验证他们的地址后,我希望用户设置为活动,这样他们就可以通过管理员后端登录 我的具体问题是,我不知道:1)如何或在何处设置活动、人员和用户组的默认值——我想这将在models.py文件中完成,但据我所知,用户模型包含在auth应用程序中;以及2)一旦电子邮件验证完成,如何触发代码将用户活动标志更改为truedjango allauth:如何仅在电子邮件验证后将用户设置为活动,django,django-admin,django-authentication,django-allauth,Django,Django Admin,Django Authentication,Django Allauth,我使用django allauth主要是为了为管理后端创建用户帐户。我希望发生的是: 1) 当用户完成注册过程时,发送验证电子邮件(到目前为止我一直在工作),并将该用户设置为非活动、staff,以及defult分配给他们的“SurveyManager”组。当前,创建用户时,active设置为true,staff设置为false,并且未分配任何组 2) 单击他们电子邮件中的链接以验证他们的地址后,我希望用户设置为活动,这样他们就可以通过管理员后端登录 我的具体问题是,我不知道:1)如何或在何处设置
提前感谢——如果这是一篇拙劣的文章,很抱歉,这是我的第一篇 帐户\u电子邮件\u验证(“可选”) 确定注册期间的电子邮件验证方法–选择“强制”、“可选”或“无”之一。当设置为“强制”时,在验证电子邮件地址之前,将阻止用户登录。选择“可选”或“无”以允许使用未验证的电子邮件地址登录。在“可选”的情况下,电子邮件验证邮件仍会发送,而在“无”的情况下,不会发送电子邮件验证邮件。我似乎已经(大部分)通过使用信号解决了我的问题。给了我这个想法(但不幸的是没有提供任何代码示例),同时给了我一些实际的具体示例进行修改(我发现这在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()
唯一还没有完全发挥作用的是电子邮件确认信号处理——它声称“EmailAddress matching query不存在”,当它在数据库条目中明显匹配时,但我会继续并将其发布。我知道这是一篇旧文章,但我在自己的搜索中遇到了这条线索。在回复您的电子邮件确认问题时,请使用email=kwargs['email\u address']。在您的EmailAddress实例调用中使用email
@receiver(email_confirmed)
def email_confirmed_(request, *args, **kwargs):
user = request.user
new_email_address = EmailAddress.objects.get(
email=kwargs['email_address'].email)
user = User.objects.get(
email=new_email_address.user)
user.is_active = True
user.save()
您还没有真正描述在尝试生成这些结果时遇到的具体编程问题。抱歉--我的具体问题是我不知道:1)如何或在何处设置活动、人员和用户组的默认值--我想这将在models.py文件中完成,但据我所知,用户模型包含在auth应用程序中。2) 如何触发代码,在电子邮件验证完成后将用户活动标志更改为true。我已将其设置为强制,该部分工作正常。不幸的是,这似乎与数据库中用户条目中的“active”属性没有关系。如果我使用allauth登录,你所说的将适用,但我实际上绕过了我的站点,使用管理面板登录,这似乎并不关心地址是否被验证。管理面板关心“active”属性是否设置为false,这就是为什么我想在验证地址时将其设置为true(并且在最初创建用户时将其默认为false)。嘿,这就是我尝试使用类似代码将用户设置为active的原因。但是,在我的情况下,用户状态没有设置为活动。它基本上没有改变。这是常见的还是我做错了什么?如果您特别需要代码,请告诉我。@DivijSehgal我建议您在另一个问题中发布代码,并将其链接到此处。我会看看我是否能回答这个问题。这是一个蹩脚的问题,我错误地设置了一个pre_save信号,以确保我总是将用户保存为非活动用户。现在将其转移到业务逻辑。不过,谢谢你:)