|
|
|
|
@ -10,6 +10,7 @@ from djangoblog.utils import send_email
|
|
|
|
|
_code_ttl = timedelta(minutes=5)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# xm: 发送验证邮件函数
|
|
|
|
|
def send_verify_email(to_mail: str, code: str, subject: str = _("Verify Email")):
|
|
|
|
|
"""发送重设密码验证码
|
|
|
|
|
Args:
|
|
|
|
|
@ -17,12 +18,15 @@ def send_verify_email(to_mail: str, code: str, subject: str = _("Verify Email"))
|
|
|
|
|
subject: 邮件主题
|
|
|
|
|
code: 验证码
|
|
|
|
|
"""
|
|
|
|
|
# xm: 构建邮件HTML内容,包含验证码信息
|
|
|
|
|
html_content = _(
|
|
|
|
|
"You are resetting the password, the verification code is:%(code)s, valid within 5 minutes, please keep it "
|
|
|
|
|
"properly") % {'code': code}
|
|
|
|
|
# xm: 调用发送邮件函数发送验证码
|
|
|
|
|
send_email([to_mail], subject, html_content)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# xm: 验证验证码函数
|
|
|
|
|
def verify(email: str, code: str) -> typing.Optional[str]:
|
|
|
|
|
"""验证code是否有效
|
|
|
|
|
Args:
|
|
|
|
|
@ -34,16 +38,22 @@ def verify(email: str, code: str) -> typing.Optional[str]:
|
|
|
|
|
这里的错误处理不太合理,应该采用raise抛出
|
|
|
|
|
否测调用方也需要对error进行处理
|
|
|
|
|
"""
|
|
|
|
|
# xm: 从缓存中获取对应邮箱的验证码
|
|
|
|
|
cache_code = get_code(email)
|
|
|
|
|
# xm: 比较输入的验证码和缓存中的验证码是否一致
|
|
|
|
|
if cache_code != code:
|
|
|
|
|
return gettext("Verification code error")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# xm: 设置验证码到缓存函数
|
|
|
|
|
def set_code(email: str, code: str):
|
|
|
|
|
"""设置code"""
|
|
|
|
|
# xm: 使用Django缓存系统存储验证码,设置过期时间
|
|
|
|
|
cache.set(email, code, _code_ttl.seconds)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# xm: 从缓存获取验证码函数
|
|
|
|
|
def get_code(email: str) -> typing.Optional[str]:
|
|
|
|
|
"""获取code"""
|
|
|
|
|
# xm: 从Django缓存系统中获取指定邮箱的验证码
|
|
|
|
|
return cache.get(email)
|
|
|
|
|
|