AttributeError: объект 'AnonymousUser' не имеет атрибута 'is_email_verified'

У меня есть приложение django с системой регистрации, и оно не работает так, как ожидалось. Недавно я добавил проверку электронной почты в моем представлении и из-за этого я получаю ошибку.

Для проверки электронной почты у меня есть 2 функции. Одна функция отправляет электронное письмо, другая проверяет и создает пользователя.

функция 1

from .utils import (
    generate_token
)
def send_action_email(user, request):
    current_site = get_current_site(request)
    email_subject = 'Activate account | Zane'
    email_body = render_to_string('authentication/email/email_body.html', {
        'user': models.PersonalUser,
        'domain': current_site,
        'uid': urlsafe_b64encode(force_bytes(user.pk)),
        'token': generate_token.make_token(user)
    })

    email = EmailMessage(subject=email_subject, body=email_body, from_email=settings.EMAIL_FROM_USER, to=[user.email])
    email.send()

функция 2

from .utils import (
    generate_token
)
def activate_user(request, uidb64, token):

    try:
        # uid = force_str(urlsafe_base64_decode(uidb64).decode())
        uid = force_str(urlsafe_b64decode(uidb64))

        user = models.PersonalUser.objects.get(pk=uid)
    
    except Exception as e:
        user = None

    if user and generate_token.check_token(user, token):
        user.is_email_verified = True
        user.save()
        print('user activated')
        return redirect(reverse('login'))
    return render(request, 'authentication/email/activation-failed.html')

Затем у меня есть мой основной класс регистрации:

class PersonalRegister(View):

    def post(self, request, *args, **kwargs):
        ...
        #get data from form using request.POST.get

        send_action_email(request.user, request)
        ...

    def get(self, request, *args, **kwargs):
        return render(request, 'authentication/personal/personal_signup.html')

urls.py

from django.urls import path

from .views import (
    Login,
    PersonalRegister,
    logout_user,
    activate_user
)

urlpatterns = [
    path('login/', Login.as_view(), name='login'),
    path('register/', PersonalRegister.as_view(), name='register'),
    path('logout/', logout_user, name='logout'),
    path('activate-user/<uidb64>/<token>/', activate_user, name='activate')
]

utils.py

from time import time
from django.contrib.auth.tokens import PasswordResetTokenGenerator

import six

class TokenGenerator(PasswordResetTokenGenerator):
    def _make_hash_value(self, user, timestamp):
        return (six.text_type(user.pk)+six.text_type(timestamp)+six.text_type(user.is_email_verified))

generate_token = TokenGenerator()

Когда я запускаю свое приложение, я получаю ошибку AttributeError: 'AnonymousUser' object has no attribute 'is_email_verified'.

Что я пробовал?

Вход в систему до выполнения процесса аутентификации, и это сработало, но смысл в том, чтобы заставить нового пользователя выйти из системы. Позже я также планирую ограничить доступ к регистрации и входу для зарегистрированных пользователей

.

Спасибо за помощь:)

Вернуться на верх