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

如何在Node.js中集成Infobip API实现注册环节2FA OTP手机号验证

Node.js 环境下基于 Infobip 实现 2FA 手机号核验方案

前置准备

  • 注册 Infobip 账号,获取 API 密钥、服务 baseUrl、发件人ID,以上信息均可在账号控制台直接获取
  • Node.js 版本要求 >= 14.x

步骤1:安装依赖

推荐使用官方提供的 Node.js SDK,直接执行以下命令安装:
npm install @infobip-api/sdk

步骤2:初始化 Infobip 客户端

const { Infobip, AuthType } = require('@infobip-api/sdk');
// 敏感参数建议存在环境变量中,不要硬编码
const infobipClient = new Infobip({
  baseUrl: process.env.INFOBIP_BASE_URL,
  apiKey: process.env.INFOBIP_API_KEY,
  authType: AuthType.ApiKey,
});

步骤3:核心业务逻辑实现

注册流程的逻辑如下:用户提交手机号 → 后端调用 Infobip 接口发送 OTP 验证码,返回 pinId 给前端暂存 → 用户填写收到的验证码,前端将 pinId + 验证码 + 手机号传给后端核验 → 核验通过后走后续注册逻辑。

发送 OTP 验证码函数

async function sendRegistrationOtp(phoneNumber) {
  try {
    // 先创建2FA消息模板
    const tplRes = await infobipClient.tfa.create2faMessage({
      body: {
        pinType: 'NUMERIC',
        pinLength: 6,
        validityPeriod: 5, // 验证码有效期,单位分钟
        messageText: '你的注册验证码是{{pin}},5分钟内有效,请勿泄露给他人。',
        senderId: process.env.INFOBIP_SENDER_ID,
      }
    });
    const appId = tplRes.data.appId;
    // 给目标手机号发送验证码
    const sendRes = await infobipClient.tfa.sendPinCodeOverSms({
      appId: appId,
      body: { phoneNumber }
    });
    // pinId需要返回给前端,核验时必须传
    return { success: true, pinId: sendRes.data.pinId };
  } catch (e) {
    console.error('OTP发送失败:', e);
    return { success: false, msg: '验证码发送失败,请稍后重试' };
  }
}

核验 OTP 验证码函数

async function verifyRegistrationOtp(pinId, userInputPin) {
  try {
    const verifyRes = await infobipClient.tfa.verifyPinCode({
      pinId: pinId,
      body: { pin: userInputPin }
    });
    if (verifyRes.data.verified) {
      return { success: true, msg: '手机号核验通过' };
    }
    return { success: false, msg: '验证码错误或已过期' };
  } catch (e) {
    console.error('OTP核验失败:', e);
    return { success: false, msg: '核验失败,请稍后重试' };
  }
}

生产环境注意事项

  • 必须限制同一手机号的发送频率,建议1分钟内最多发送1次,单日最多10次,避免被恶意刷取短信
  • 重发验证码时可以复用之前的pinId,不需要重新创建2FA模板,减少不必要的接口调用
  • 如果不想引入官方SDK,也可以直接用axios/fetch调用Infobip的REST接口,参数和上述SDK入参完全一致

内容的提问来源于stack exchange,提问作者Swati Dixit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:39:03