【问题标题】:How to verify google authenticator code using passport-2fa-totp?如何使用 passport-2fa-totp 验证谷歌验证码?
【发布时间】:2019-07-18 19:06:56
【问题描述】:

我正在使用 passportjs 模块 [passport-2fa-totp][1]http://www.passportjs.org/packages/passport-2fa-totp/ 实现两因素身份验证

我能够成功注册用户并存储其密钥。

我无法验证由谷歌身份验证器应用生成的 totp-code 我使用以下代码作为参考,

`passport.use(new TwoFAStartegy(function (username, password, done) {

// 1st step verification: username and password

User.findOne({ username: username }, function (err, user) {
    if (err) { return done(err); }
    if (!user) { return done(null, false); }
    if (!user.verifyPassword(password)) { return done(null, false); }
    return done(null, user);
});}, function (user, done) {
// 2nd step verification: TOTP code from Google Authenticator

if (!user.secret) {
    done(new Error("Google Authenticator is not setup yet."));
} else {
    // Google Authenticator uses 30 seconds key period
    // https://github.com/google/google-authenticator/wiki/Key-Uri-Format

    var secret = GoogleAuthenticator.decodeSecret(user.secret);
    done(null, secret, 30);
}}));`

我无法理解验证的第二步。首先,我无法访问此处需要验证的code 字段,而且我也无法获取任何正确的输出。它只是返回给我Invalid username or password,事实并非如此。

帮帮我!

【问题讨论】:

    标签: node.js passport.js


    【解决方案1】:

    请检查您是否仅在这些确切字段中而不是在任何其他字段中获得usernamepasswordcode,因为passport-2fa-totp 假定您仅在这些字段中获得。

    code 字段将传递给TwoFAStartegy 的第二个回调,verify fn 将验证代码。

    也许,如果您这样做,您可以获得更多信息,

    new TwoFAStartegy({ passReqToCallback: true }, (username, password, done) => 
    {
    // First Callback
    }, (req, user, verify) => {
    console.log(req) // The request Object
    // Use req here
    })
    

    如果有帮助请告诉我:)

    【讨论】:

    • 实际上我的错误是我在 Google Authenticator 中使用了错误的密钥,但感谢您的帮助。仅对于遇到问题的人passReqToCallback 参数是可选的。
    猜你喜欢
    • 2022-09-24
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多