2017-09-24 4 views
0

現在、ノード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 definedawaitを削除するとうまくいきますが、間違ったパスワードを入力することはできますが、まだログインできます。そして、私は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がその関数であるものを指定しないでください:

+0

'user.isValidPassword(password)'は何を返しますか?待つことなく試してみてください。 – Firanolfind

+0

@Firanolfindこんにちは!あなたは返品で何を意味しますか? :O –

答えて

1

まあ、これは少し厄介ですが、私はそれが自分のばかな質問に答えるために私の義務だと思う...私の機能isValidPasswordはこれを持っています。

関連する問題