javascript - 使用await时 undefined object

标签 javascript node.js jwt passport.js

我目前正在尝试向我的 Node 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)
    }
  })
)

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

{
    "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)
  }
}

我想我明显遗漏了一些东西,但我无法解决这个问题。

感谢您花时间阅读本文!

最佳答案

嗯,这有点尴尬,但我想我有责任回答我自己的愚蠢问题...我的函数 isValidPassword 具有以下内容:...user.password 并且我没有指定该函数中的 user 是什么。它需要 this

关于javascript - 使用await时 undefined object ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46385864/

相关文章:

javascript - jQuery Slider - 如何根据另一个 slider 制作一组具有最大值的 slider ?

typescript - 如何使用 typescript 获取 `jsonwebtoken` 的 token 过期

token - 从客户端向 JWT 添加数据

node.js - 我可以从 jwt 键中删除除第一个和最后一个以外的所有换行符吗

javascript - 为什么即使元素不在视口(viewport)中,我的函数也会添加一个类?

javascript - 在 HTML 上输出文本时不显示文本

node.js - Node 集群和/或 Docker 集群?

javascript - Node Schedule是否产生/ fork 新进程

javascript - 如何模糊 puppeteer 中的输入元素?

javascript - 是否可以从网页运行 Node 脚本?