我使用django-allauth主要是为管理后端创建用户帐户。我希望发生的是:
1)当用户完成注册程序时,发出验证电子邮件(我目前已执行此操作)并将用户设置为非活动状态,人员和分配给他们的“SurveyManager”组defult。目前,创建的用户的活动设置为true,人员设置为false,并且未分配任何组。
2)点击电子邮件中的链接以验证其地址后,我希望将用户设置为活动状态,以便他们可以通过管理员后端登录。
我的具体问题是我不知道:1)如何或在何处设置用户的活动,人员和组的默认值 - 我想这可以在models.py文件中完成,但它是我的理解是用户模型包含在auth app中; 2)如何在电子邮件验证完成后触发代码将用户活动标志更改为true。
提前致谢 - 对不起,如果这是一篇创作不佳的帖子,那就是我的第一个!
答案 0 :(得分:9)
我似乎(大部分)通过使用信号解决了我的问题。 This post给了我这个想法(但遗憾的是没有提供任何代码示例),而this site给了我一些实际修改的具体例子(我发现这是一种罕见的商品)在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匹配查询不存在",当它在数据库中明显匹配时条目,但我会继续并在a separate question中发布。
答案 1 :(得分:1)
ACCOUNT_EMAIL_VERIFICATION(=“可选”) 确定注册期间的电子邮件验证方法 - 选择“强制”,“可选”或“无”之一。设置为“强制”时,将阻止用户登录,直到验证电子邮件地址。选择“可选”或“无”以允许使用未经验证的电子邮件地址登录。如果是“可选”,则仍会发送电子邮件验证邮件,而在“无”的情况下,不会发送电子邮件验证邮件。
答案 2 :(得分:0)
我知道这是一篇旧帖子,但我在自己的搜索中遇到了这个帖子。在回复您的email_confirmed问题时,请在您的EmailAddress实例调用中使用email = kwargs ['email_address']。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()