如何在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
相关产品推荐
相关产品推荐

