试图通过Django电子邮件确认来验证用户,但是某些用户在尝试确认其电子邮件时遇到此错误

问题描述 投票:0回答:1

之前我问过这个问题的一个变体,但意识到我还不清楚。这是我试图更好地解释问题的尝试。

我在用户注册网站后向用户的电子邮件发送链接以确认注册。但是,一小部分用户在尝试确认电子邮件时收到以下错误。

错误:

TypeError/activate/{uidb64}/{token}/
error
'AnonymousUser' object is not iterable

我认为问题在于激活功能无法识别它们。但是,如果我将其发送回登录页面,则不确定如何使此激活链接起作用。有什么想法吗?

我是否需要添加类似'if not user.is_authenticated:'之类的内容,然后发送重定向登录?但是,如何返回激活功能?在所有情况下,我的应用程序都可以登录。

激活代码:

try:
    uid = force_text(urlsafe_base64_decode(uidb64))
    user = User.objects.get(pk=uid)
except(TypeError, ValueError, OverflowError, User.DoesNotExist):
    user = None
if user is not None and account_activation_token.check_token(user, token):
    .... do something
else:
    return HttpResponse('Activation link is invalid!')

我在这里创建电子邮件:

def activation_email(request):
    if request.user.is_authenticated:
        user=request.user
        message = render_to_string('email.html', {
                'user':user,
                'token':account_activation_token.make_token(user),
                'uid':urlsafe_base64_encode(force_bytes(user.pk)),
        })
        ....send mail
    else:
        return redirect('somewhere_else')

编辑>:当我尝试用电子邮件验证信息更新模型时失败:

if user is not None and account_activation_token.check_token(user, token):
      object, created = User_Profile.objects.get_or_create(
            user=request.user,
            ## This is where it fails
            email_validated=True,
        )
django email activation
1个回答
1
投票

我认为您激活用户的方法在这里是错误的。我认为您不需要激活经过身份验证的用户。因为如果他们通过身份验证,则意味着他们是活动用户,因此他们不需要激活。

关于错误,激活用户后,您在此处获得了用户信息:

if user is not None and account_activation_token.check_token(user, token):  # <-- in user variable

所以为什么不在下一节中使用它(根据评论):

obj, created = User_Profile.objects.get_or_create(
    user=user,  # <-- here
    email_validated=True,
)
© www.soinside.com 2019 - 2024. All rights reserved.