1. 程式人生 > >驗證郵箱鏈接

驗證郵箱鏈接

視圖 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

驗證郵箱鏈接