验证邮箱后端逻辑
1. 验证邮箱接口设计和定义
1.请求方式
| 选项 | 方案 |
|---|---|
| 请求方法 | GET |
| 请求地址 | /emails/verification/ |
2.请求参数:查询参数
| 参数名 | 类型 | 是否必传 | 说明 |
|---|---|---|---|
| token | string | 是 | 邮箱激活链接 |
3.响应结果:HTML
| 字段 | 说明 |
|---|---|
| 邮箱验证失败 | 响应错误提示 |
| 邮箱验证成功 | 重定向到用户中心 |
2. 验证链接提取用户信息
在users.utils.py中添加生成认证的url方法
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer,BadData
from django.conf import settings
from apps.users.models import User
def check_verify_email_token(token):
"""
验证token并提取user
:param token: 用户信息签名后的结果
:return: user, None
"""
serializer = Serializer(settings.SECRET_KEY, expires_in=3600)
try:
data = serializer.loads(token)
except BadData:
return None
else:
user_id = data.get('user_id')
email = data.get('email')
try:
user = User.objects.get(id=user_id, email=email)
except User.DoesNotExist:
return None
else:
return user
3. 验证邮箱后端逻辑实现
验证邮箱的核心:就是将用户的
email_active字段设置为True
class VerifyEmailView(View):
def put(self, request):
# - 1.接收 token
token = request.GET.get('token')
if not token:
return JsonResponse({'code': 400, 'errmsg': 'token缺少'})
# - 2.解密
data_dict = check_verify_email_token(token)
# - 4.去数据库对比 user_id,email
try:
user = User.objects.get(pk=data_dict.get('user_id'), email=data_dict.get('email'))
except Exception as e:
print(e)
return JsonResponse({'code': 400, 'errmsg': '参数有误!'})
# - 5.修改激活状态
try:
user.email_active = True
user.save()
except Exception as e:
return JsonResponse({'code': 0, 'errmsg': '激活失败!'})