问题描述
我正在尝试使用 Web OTP API 的自动填充功能。在移动设备中,在对其进行测试时,我会弹出一个窗口以允许读取 OTP,但是在允许它不会填充 OTP 字段之后。在控制台中,我收到请求超时错误。有人对此有任何想法。这真的很有帮助。 下面是我写的代码(react app):-
console.log("otp credential in window");
//window.addEventListener('DOMContentLoaded',e => {
const input = document.querySelector('input[autocomplete="one-time-code"]');
console.log("input is ",input);
if (!input) return;
const ac = new AbortController();
console.log("before form");
const form = input.closest('form');
if (form) {
console.log("inside if form ");
form.addEventListener('submit',e => {
ac.abort();
});
}
navigator.credentials.get({
otp: { transport:['sms'] },signal: ac.signal
}).then(otp => {
console.log("promise resolved");
input.value = otp.code;
if (form) form.submit();
}).catch(err => {
console.log(err);
});
// });
}
解决方法
您必须遵循 OTP 的约定,您一直弄错了,因此 API 无法读取 OTP。
正确的格式是:
- 该消息可以以可选的人类可读文本开头,该文本可以是几个字。例如:不要分享您的 OTP 或永远不要分享您的 OTP 或任何其他相关文本。
- 消息的最后一行很重要,它由两部分组成。一个是主机部分,另一个是 OTP。调用 API 的网站 URL 的主机部分必须以“@”符号开头。下一部分是 OTP,前面应该有“#”英镑符号。例如:@www.blabla.com #2334
更多检查:https://tech.oyorooms.com/implementing-automatic-sms-verification-for-websites-oyo-9375feba0749