You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 10:35:15