尝试使用 Django 电子邮件确认来验证用户,但是一些用户在尝试确认他们的电子邮件时遇到此错误
Trying to verify a user with Django email confirmation, however some user's are getting this error when they try to confirm their email
我以前问过这个问题的变体,但发现我很不清楚。这是我试图更好地解释这个问题的尝试。
我向用户的电子邮件发送 link 以在他们注册网站后确认注册。但是,一小部分用户在尝试确认电子邮件时遇到以下错误。
错误:
TypeError/activate/{uidb64}/{token}/
error
'AnonymousUser' object is not iterable
我认为问题在于激活函数无法识别它们。但是,如果我将它们发送回登录页面,则不确定如何激活 link。有什么想法吗?
我是否需要添加类似 '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,
)
我认为您激活用户的方法在这里是错误的。我认为您不需要激活经过身份验证的用户。因为如果他们通过了身份验证,就意味着他们是活跃用户,因此他们不需要激活。
关于这个错误,当用户被激活时,你在这里得到了用户信息:
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,
)
我以前问过这个问题的变体,但发现我很不清楚。这是我试图更好地解释这个问题的尝试。
我向用户的电子邮件发送 link 以在他们注册网站后确认注册。但是,一小部分用户在尝试确认电子邮件时遇到以下错误。
错误:
TypeError/activate/{uidb64}/{token}/
error
'AnonymousUser' object is not iterable
我认为问题在于激活函数无法识别它们。但是,如果我将它们发送回登录页面,则不确定如何激活 link。有什么想法吗?
我是否需要添加类似 '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,
)
我认为您激活用户的方法在这里是错误的。我认为您不需要激活经过身份验证的用户。因为如果他们通过了身份验证,就意味着他们是活跃用户,因此他们不需要激活。
关于这个错误,当用户被激活时,你在这里得到了用户信息:
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,
)