Я использую Django 2.0.10 с rest-framework, rest-auth и allauth.У меня есть пользовательская модель пользователя.
У меня работает проверка электронной почты с использованием представления allauth.Письмо с подтверждением отправляется, когда пользователь регистрируется.Если я нажму на ссылку в электронном письме, я попаду на страницу с кнопкой, чтобы проверить электронную почту.Это все работает без ошибок.Однако что я не могу выяснить, так это то, что на самом деле делает .Кажется, что ни одно поле в данных пользователя не меняется.
Я хочу, чтобы пользователи могли регистрироваться и входить в систему, а только добавлять контент на сайт после того, как они подтвердили свою электронную почту.
Редактировать: этот пост дает часть ответа, но не говорит, как сохранить статус проверки как свойство пользователя, чтобы вы могли проверить его во внешнем интерфейсе при загрузкепользовательские данные.
settings.py
# django rest auth
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_USERNAME_REQUIRED = False
OLD_PASSWORD_FIELD_ENABLED = True
LOGOUT_ON_PASSWORD_CHANGE = False
ACCOUNT_EMAIL_VERIFICATION = 'optional'
api / urls.py
from allauth.account.views import confirm_email
urlpatterns = [
re_path(r'^rest-auth/registration/account-confirm-email/(?P<key>[-:\w]+)/$', confirm_email,
name='account_confirm_email'),
...
]
users / models.py
import uuid
from django.contrib.auth.models import AbstractUser, UserManager
from django.db import models
from django.utils.http import int_to_base36
class CustomUserManager(UserManager):
def get_by_natural_key(self, username):
case_insensitive_username_field = '{}__iexact'.format(self.model.USERNAME_FIELD)
return self.get(**{case_insensitive_username_field: username})
ID_LENGTH = 12
def pkgen():
from base64 import b32encode
from hashlib import sha1
from random import random
pk = int_to_base36(uuid.uuid4().int)[:ID_LENGTH]
return pk
class CustomUser(AbstractUser):
objects = CustomUserManager()
slug = models.CharField(max_length=ID_LENGTH, default=pkgen, editable=False)
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
def __str__(self):
return self.email
Когда пользователь входит в систему, как я могу узнать, подтвердили ли они свой адрес электронной почты?Спасибо за любую помощь!