使用await时未定义对象

时间:2017-09-24 02:00:56

标签: javascript node.js jwt passport.js

我目前正在尝试为我的节点API添加一些身份验证。

现在我正在使用PassportJS(对我的不称职的人来说很新意)。

我正在尝试添加本地策略,并在登录时检查用户密码是否合法:

// Local Strategy
passport.use(
  new LocalStrategy(async (username, password, done) => {
    try {
      // Find user by username
      const user = await User.findOne({ username })

      // No user found
      if (!user) {
        return done(null, false)
      }
      console.log('user', user) // Getting output

      // Check if password correct
      const isMatch = await user.isValidPassword(password)

      // Handle if password is not correct
      if (!isMatch) {
        return done(null, false)
      }

      // Return user
      done(null, user)
    } catch (err) {
      done(err, false)
    }
  })
)

我注意到的事情是awaitconst isMatch = await user.isValidPassword(password)使用邮递员时说:Error: ReferenceError: user is not defined。当我删除await它工作正常,但我可以输入错误的密码,但我仍然可以登录。当我在console.log上时,我可以看到我的user对象。

{
    "username": "martinnord3",
    "password": "this_is_the_wrong_password"
}

这里是isValidPassword功能:

UserSchema.methods.isValidPassword = async function(newPassword) {
  try {
    return await bcrypt.compare(newPassword, user.password)
  } catch (err) {
    throw new Error(err)
  }
}

我想我有一些明显缺失的东西,但我无法解决这个问题。

感谢您花时间阅读本文!

1 个答案:

答案 0 :(得分:1)

嗯这有点尴尬,但我想我有责任回答我自己的愚蠢问题......我的函数isValidPassword有这个:...user.password而我没有说明{{1}在那个函数中..它期望user