perf: 修改验证码多次验证

This commit is contained in:
ibuler 2023-09-25 23:14:22 +08:00 committed by 老广
parent 39affc4989
commit 3352f78e01

View File

@ -1,14 +1,13 @@
from django.core.cache import cache
from django.conf import settings
from django.core.mail import send_mail
from celery import shared_task
from django.conf import settings
from django.core.cache import cache
from django.core.mail import send_mail
from common.sdk.sms.exceptions import CodeError, CodeExpired, CodeSendTooFrequently
from common.sdk.sms.endpoint import SMS
from common.exceptions import JMSException
from common.utils.random import random_string
from common.sdk.sms.endpoint import SMS
from common.sdk.sms.exceptions import CodeError, CodeExpired, CodeSendTooFrequently
from common.utils import get_logger
from common.utils.random import random_string
logger = get_logger(__file__)
@ -27,6 +26,7 @@ class SendAndVerifyCodeUtil(object):
self.timeout = timeout
self.backend = backend
self.key = key or self.KEY_TMPL.format(target)
self.verify_key = self.key + '_verify'
self.other_args = kwargs
def gen_and_send_async(self):
@ -47,6 +47,11 @@ class SendAndVerifyCodeUtil(object):
raise
def verify(self, code):
times = cache.get(self.verify_key, 0)
if times >= 3:
self.__clear()
raise CodeExpired
cache.set(self.verify_key, times + 1, timeout=self.timeout)
right = cache.get(self.key)
if not right:
raise CodeExpired
@ -59,6 +64,7 @@ class SendAndVerifyCodeUtil(object):
def __clear(self):
cache.delete(self.key)
cache.delete(self.verify_key)
def __ttl(self):
return cache.ttl(self.key)