我正在使用带有 rest-framework、rest-auth 和 allauth 的 Django 2.0.10。我有一个自定义用户模型。
我已经使用 allauth 视图进行电子邮件验证。验证电子邮件在用户注册时发送。如果我单击电子邮件中的链接,我将被带到一个页面,该页面带有一个按钮以单击以验证电子邮件。这一切都没有错误。但是我不知道这实际上是做什么的。用户数据中的任何字段似乎都没有改变。
我想要的行为是让用户能够注册和登录,但只有在他们验证了他们的电子邮件后才能向网站添加内容。
编辑:这篇文章给出了部分答案,但没有说明如何将验证状态保存为用户的属性,以便您在加载用户数据时可以在前端进行检查。
设置.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'),
...
]
用户/模型.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
当用户登录时,我怎样才能知道他们是否已经验证了他们的电子邮件地址?谢谢你的帮助!