如何使用password-2fa-totp验证Google身份验证器代码?

时间:2019-02-25 11:26:49

标签: node.js passport.js

我正在使用passportjs模块[passport-2fa-totp] [1] http://www.passportjs.org/packages/passport-2fa-totp/

实现两要素身份验证

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

我无法验证由Google Authenticator应用生成的top代码,我正在使用以下代码作为参考,

`passport.use(新的TwoFAStartegy(函数(用户名,密码完成){

// 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,情况并非如此。

帮帮我!

1 个答案:

答案 0 :(得分:0)

请确保仅在这些确切字段中获得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
})

让我知道是否有帮助:)