为什么我的带有谷歌身份验证器的电子应用程序总是返回 false,即使令牌是正确的?

问题描述 投票:0回答:1

在此代码中,我向主进程发送请求,以使用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

javascript node.js electron
1个回答
0
投票

我电脑上的时钟比手机上的时钟早3分钟,这就是为什么它总是返回错误

© www.soinside.com 2019 - 2024. All rights reserved.