工作区生产环境沙盒
发送代理
API 密钥 · 客户运营团队ALAlex Lee 管理员权限已更新
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({
apiKey: process.env.BIRD_API_KEY!,
});
// Send the code, then check it by recipient.
await bird.verify.verifications.create({
to: { phone_number: "+15551234567" },
}).safe();
const { data, error } = await bird.verify.verifications.check({
to: { phone_number: "+15551234567" },
code: userInput,
}).safe();
if (error) throw error;
您的账户
输入发送至以下号码的验证码
+1 ••• ••• 4567示例验证码
底层来看,2FA 与 Bird Verify API 在各处运行的流程完全相同:用户登录时为其手机号或邮箱创建一次验证,然后校验其输入的验证码。由于校验基于接收方,你的登录处理器无需维护每次尝试的状态,工作区的路由规则决定给定用户使用哪个渠道。将密码放在前面,同样的流程就变成了免密登录。
两次调用加一项配置。
登录时发送,提交时校验。
用户通过第一因素认证后创建一次验证;用户输入验证码时进行校验。这就是全部集成。
SMS、WhatsApp 或电子邮件作为认证因素。
使用你已有的用户渠道:通过 SMS 或 WhatsApp 发送到手机号,通过电子邮件发送到邮箱。语音渠道正在逐步上线,提供更多选择。
一份配置,全工作区生效。
路由、验证码规则和渠道方案集中在一份配置中,覆盖整个工作区,已涵盖登录、注册和高价值操作。
暴力破解受到限制。
尝试锁定和按接收方的发送上限内置其中,确保第二因素不会成为新的攻击面。
密码验证通过后发送验证码;用户提交时进行校验。验证码错误是一个分支结果,而非需要捕获的异常。
// Send the second factor once the password checks out.
await bird.verify.verifications.create({
to: { phone_number: user.phone },
}).safe();
const { data, error } = await bird.verify.verifications.check({
to: { phone_number: user.phone },
code: submitted,
}).safe();
if (error) throw error;
if (data.success) grantSession(user);
在工作区中组织团队,控制 API 访问权限,通过审计日志追踪变更。