如何在Django应用中设置符合WICG规范的高级一次性短信验证码
适配WICG短信一次性验证码规范的实现步骤
1. 调整验证码位数至6位
按照示例中的验证码格式,先将原4位验证码改为6位,同步修改生成和验证函数的digits参数:
from pyotp import HOTP from django.db.models import F def make_totp(user: User) -> str: # 将digits从4改为6,匹配规范示例的验证码长度 totp = HOTP(user.otp_secret, digits=6) totp_code = totp.at(user.otp_counter) return totp_code def totp_verify(user: User, totp_code: str, verify=None) -> bool: if user: # 同步修改digits为6 totp = HOTP(user.otp_secret, digits=6) verify = totp.verify(otp=totp_code, counter=user.otp_counter) if verify: user.otp_counter = F("otp_counter") + 1 user.save() return verify
2. 生成符合WICG规范的短信内容
新增一个专门的函数,拼接出规范要求的<关联地址>, <验证码>, <说明文本>格式内容:
def generate_wicg_sms_message(otp_code: str, origin_url: str, company_name: str) -> str: """生成符合WICG sms-one-time-codes规范的短信内容""" description = f"{otp_code} is your {company_name} authentication code." return f"{origin_url}, {otp_code}, {description}"
3. 发送短信时使用规范格式
在你调用短信发送的业务逻辑中(比如视图、短信任务等),先生成验证码,再调用上述函数生成规范格式的短信内容,最后发送:
# 示例:短信发送逻辑中的调用代码 from .services import make_totp, generate_wicg_sms_message def send_verification_sms(user): otp_code = make_totp(user) # 替换为你的Django应用实际域名 origin_url = "https://your-app-domain.com" company_name = "ExampleCo" # 替换为你的应用/公司名称 sms_content = generate_wicg_sms_message(otp_code, origin_url, company_name) # 调用你的短信发送接口,传入生成好的sms_content # send_sms(user.phone_number, sms_content)
关键说明
origin_url必须是你的应用实际域名,浏览器会通过该地址匹配当前网站,实现验证码自动填充- 若坚持使用4位验证码,可保持
digits=4,但需同步调整说明文本中的验证码长度 - 验证逻辑无需额外修改,
totp_verify仅需提取用户输入的纯验证码(自动填充或手动输入)即可完成校验
内容的提问来源于stack exchange,提问作者Iren E
相关产品推荐
相关产品推荐

