Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django allauth:如何仅在电子邮件验证后将用户设置为活动_Django_Django Admin_Django Authentication_Django Allauth - Fatal编程技术网

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

django 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)如何或在何处设置

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

1) 当用户完成注册过程时,发送验证电子邮件(到目前为止我一直在工作),并将该用户设置为非活动、staff,以及defult分配给他们的“SurveyManager”组。当前,创建用户时,active设置为true,staff设置为false,并且未分配任何组

2) 单击他们电子邮件中的链接以验证他们的地址后,我希望用户设置为活动,这样他们就可以通过管理员后端登录

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


提前感谢——如果这是一篇拙劣的文章,很抱歉,这是我的第一篇

帐户\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信号,以确保我总是将用户保存为非活动用户。现在将其转移到业务逻辑。不过,谢谢你:)