2017-09-24 106 views
0

我目前正在嘗試向我的節點API添加一些身份驗證。使用await時未定義對象

現在我正在使用PassportJS(對於這個非常新,所以對不起我的不稱職者)。

我試圖添加本地策略,並檢查用戶的密碼是合法時,在洛:Error: ReferenceError: user is not defined

// 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)當郵遞員說的是。當我刪除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) 
    } 
} 

我想有一些明顯的我失蹤,但我不能設法解決這個問題。

感謝您花時間閱讀本文!

+0

'user.isValidPassword(password)'返回什麼?儘量不要等待。 – Firanolfind

+0

@Firanolfind您好!你的回報是什麼意思? :o –

回答

1

嗯,這是一個有點尷尬,但我想這是我的責任回答我自己的愚蠢的問題...我的功能isValidPassword有這個:...user.password,我不指定哪些user是在功能..它預計this