VerifyCodeController.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from django.views import View
  4. from Controller.CheckUserData import DataValid
  5. from Object.RedisObject import RedisObject
  6. from Object.ResponseObject import ResponseObject
  7. from Object.TokenObject import TokenObject
  8. from Service.CommonService import CommonService
  9. class VerifyCodeView(View):
  10. def get(self, request, *args, **kwargs):
  11. request.encoding = 'utf-8'
  12. operation = kwargs.get('operation', None)
  13. request_dict = request.GET
  14. return self.validate(request_dict, operation)
  15. def post(self, request, *args, **kwargs):
  16. request.encoding = 'utf-8'
  17. operation = kwargs.get('operation', None)
  18. request_dict = request.POST
  19. return self.validate(request_dict, operation)
  20. def validate(self, request_dict, operation):
  21. response = ResponseObject()
  22. if operation == 'forget':
  23. return self.verify_forget(request_dict, response)
  24. elif operation == 'register':
  25. return self.verify_register(request_dict, response)
  26. elif operation == 'image':
  27. return self.verify_image(request_dict, response)
  28. else:
  29. return response.json(404)
  30. def verify_forget(self, request_dict, response):
  31. email = request_dict.get('email', None)
  32. phone = request_dict.get('phone', None)
  33. authcode = request_dict.get('authcode', None)
  34. key = '_forgetPwdResetCode'
  35. if authcode is None:
  36. return response.json(444)
  37. authcode = CommonService.decode_data(authcode)
  38. if email is not None:
  39. email = email.strip()
  40. return self.email_validate(key, email, authcode, response)
  41. elif phone is not None:
  42. phone = phone.strip()
  43. return self.phone_validate(key, phone, authcode, response)
  44. else:
  45. return response.json(444)
  46. def verify_register(self, request_dict, response):
  47. email = request_dict.get('email', None)
  48. phone = request_dict.get('phone', None)
  49. authcode = request_dict.get('authcode', None)
  50. key = '_identifyingCode'
  51. if authcode is None:
  52. return response.json(444)
  53. authcode = CommonService.decode_data(authcode)
  54. if email is not None:
  55. email = email.strip()
  56. return self.email_validate(key, email, authcode, response)
  57. elif phone is not None:
  58. phone = phone.strip()
  59. return self.phone_validate(key, phone, authcode, response)
  60. else:
  61. return response.json(444)
  62. def verify_image(self, request_dict, response):
  63. imageCodeId = request_dict.get('imageCodeId', None)
  64. authcode = request_dict.get('authcode', None)
  65. if imageCodeId and authcode:
  66. authcode = CommonService.decode_data(authcode)
  67. image_code_key = 'image_code_' + imageCodeId
  68. redisObj = RedisObject(db=6)
  69. # redis里面的验证码
  70. redis_image_code = redisObj.get_data(key=image_code_key)
  71. # 验证用户输入的验证码和redis中的验证码
  72. if redis_image_code is False or authcode.lower() != redis_image_code.lower():
  73. return response.json(121)
  74. else:
  75. return response.json(0)
  76. else:
  77. return response.json(444)
  78. def email_validate(self, key, email, authcode, response):
  79. authcode.strip()
  80. data_valid = DataValid()
  81. if data_valid.email_validate(email) is not True:
  82. return response.json(105)
  83. reds = RedisObject()
  84. resetCode = reds.get_data(key=email + key)
  85. if resetCode is False:
  86. return response.json(120)
  87. if authcode != resetCode:
  88. return response.json(121)
  89. return response.json(0)
  90. def phone_validate(self, key, phone, authcode, response):
  91. authcode.strip()
  92. data_valid = DataValid()
  93. if data_valid.mobile_validate(phone) is not True:
  94. return response.json(100)
  95. reds = RedisObject()
  96. resetCode = reds.get_data(key=phone + key)
  97. if resetCode is False:
  98. return response.json(120)
  99. print(resetCode)
  100. if authcode != resetCode:
  101. return response.json(121)
  102. return response.json(0)