diff --git a/apps/common/utils/verify_code.py b/apps/common/utils/verify_code.py index abf4d6056..cd76463cc 100644 --- a/apps/common/utils/verify_code.py +++ b/apps/common/utils/verify_code.py @@ -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)