在此代码中,我向主进程发送请求,以使用spokeasy和qrcode从秘密生成qrcode
document.addEventListener('DOMContentLoaded', async function() {
const data = await ipcRenderer.invoke('generate-qrcode')
image.setAttribute("src", data)
})
在主过程中,它会生成一个秘密代码并返回二维码,然后将其放入图像中
var secret = speakeasy.generateSecret({
name: "Auth"
})
console.log(secret.ascii)
ipcMain.handle('generate-qrcode', async () => {
const data = await new Promise((resolve, reject) => {
qrcode.toDataURL(secret.otpauth_url, (err, data) => {
if (err) {
reject(err)
} else {
resolve(data)
}
})
})
return data
})
用户可以选择输入验证码并将输入的代码发送到主进程来处理验证
if (e.key === 'Enter') {
const code = Array.from(inputs).map(input => input.value).join('');
ipcRenderer.send('verify-code', code)
}
在主流程中验证代码
ipcMain.on('verify-code', (event, code) => {
var verified = speakeasy.totp.verify({
secret: secret.ascii,
encoding: "ascii",
token: code
})
console.log(code + " " + verified)
})
但即使代码是正确的,无论如何它总是返回 False
我电脑上的时钟比手机上的时钟早3分钟,这就是为什么它总是返回错误