Emite y verifica un OTP
Genera códigos con aleatoriedad criptográfica y verifícalos de una sola vez.
Emitir un OTP es generar un número aleatorio de 6 dígitos, guardarlo asociado al teléfono con una expiración y enviarlo. Verificar es comparar y, si coincide, invalidarlo.
Pruébalo
mx.otp.issue(phone) genera un código con crypto.getRandomValues y lo muestra como mensaje de sistema. mx.otp.verify(phone, code) devuelve true una sola vez: el código se consume al usarse.
// Emite y verifica un OTP
const phone = "+56987654321";
const code = mx.otp.issue(phone);
console.log("código emitido (en producción nunca lo registres):", code);
console.log("código erróneo →", mx.otp.verify(phone, "000000"));
console.log("código correcto →", mx.otp.verify(phone, code));
console.log("reutilizado →", mx.otp.verify(phone, code));Guarda el hash, no el código
Guarda un hash del código (por ejemplo SHA-256 con el teléfono como sal) en lugar del código en texto plano. Si tu almacén se filtra, los códigos vigentes no quedan expuestos.
−store.set(phone, { code, exp: Date.now() + 300000 });+const hash = await sha256(phone + ":" + code);+store.set(phone, { hash, exp: Date.now() + 300000, attempts: 0 });
Observa en el playground que el código se elimina después de una verificación exitosa: un OTP es de un solo uso por definición. Si vuelves a llamar a verify con el mismo código, obtendrás false.