Я задавал вариант этого вопроса раньше, но понял, что мне очень непонятно. Это моя попытка лучше объяснить проблему.
Я отправляю ссылку на электронную почту пользователя, чтобы подтвердить регистрацию после регистрации на сайте. Однако небольшая часть пользователей получает следующую ошибку при попытке подтвердить свою электронную почту.
Ошибка:
TypeError/activate/{uidb64}/{token}/
error
'AnonymousUser' object is not iterable
Мне кажется, проблема в том, что функция активации не распознает их. Однако не уверен, как заставить эту ссылку активации работать, если я отправлю их обратно на страницу входа. Любые идеи?
Нужно ли добавить что-то вроде «если не 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,
)