現在、ノードAPIに認証を追加しようとしています。awaitを使用しているときにオブジェクトが定義されていません
今、私はPassportJSを使用しています(私の無能な人には申し訳ありません)。私は地元の戦略を追加し、中loggin場合に、ユーザーのパスワードが合法であるかどうかを確認しようとしています
:await
を使用した場合
// 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)
}
})
)
は、私が気づいた何かがポストマンconst 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)
}
}
私が欠けている明らかに何かがそこだと思うが、私はこれを解決するために管理することはできません。
お読みいただきありがとうございます。 ...それはthis
を期待...user.password
と私はuser
がその関数であるものを指定しないでください:
'user.isValidPassword(password)'は何を返しますか?待つことなく試してみてください。 – Firanolfind
@Firanolfindこんにちは!あなたは返品で何を意味しますか? :O –