驗證郵箱鏈接
阿新 • • 發佈:2018-07-31
視圖 ads com 方法 doesn ria 請求方式 secret active
當用戶點擊郵箱裏的鏈接時,進入到success_verify_email.html頁面。
在該頁面中,我們將請求網址中用於驗證的token發送給後端接口,由後端接口判斷token的有效性,如果token有效,則修改郵箱的驗證狀態,並將處理結果返回給前端展示給用戶。
後端接口設計:
請求方式:GET /emails/verification/?token=xxx
請求參數: 查詢字符串參數
參數 | 類型 | 是否必須 | 說明 |
---|---|---|---|
token | str | 是 | 用於驗證郵箱的token |
返回數據: JSON
返回值 | 類型 | 是否必須 | 說明 |
---|---|---|---|
message | str | 是 | 驗證處理結果 |
在users/views.py 中新建視圖
# url(r‘^emails/verification/$‘, views.VerifyEmailView.as_view()),
class VerifyEmailView(APIView):
"""
郵箱驗證
"""
def get(self, request):
# 獲取token
token = request.query_params.get(‘token‘)
if not token:
return Response({‘message‘: ‘缺少token‘}, status=status.HTTP_400_BAD_REQUEST)
# 驗證token
user = User.check_verify_email_token(token)
if user is None:
return Response({‘message‘: ‘鏈接信息無效‘}, status=status.HTTP_400_BAD_REQUEST)
else:
user.email_active = True
user.save()
return Response({‘message‘: ‘OK‘})
在User模型類中定義驗證token的方法
@staticmethod
def check_verify_email_token(token):
"""
檢查驗證郵件的token
"""
serializer = TJWSSerializer(settings.SECRET_KEY, expires_in=constants.VERIFY_EMAIL_TOKEN_EXPIRES)
try:
data = serializer.loads(token)
except BadData:
return None
else:
email = data.get(‘email‘)
user_id = data.get(‘user_id‘)
try:
user = User.objects.get(id=user_id, email=email)
except User.DoesNotExist:
return None
else:
return user
驗證郵箱鏈接