Я использую Passport для регистрации пользователей в Nodejs. Но когда я пытался получить доступ к пользователю с помощью req.user, я получаю: Promise {pending}
Однако я могу получить идентификатор пользователя с помощью req.session.passport.user.id - это нормально, делать это таким образом ?
Это обещание, как я могу его улучшить?
const getUserBy = async (what, type) => {
const poolConnection = mysql.createPool({
host : 'localhost',
user : 'root',
password: 'password',
port: 3306,
database: 'mydb'
});
//FIND THE USER AND RETURN IT
return new Promise(function (resolve, reject){
poolConnection.getConnection((err, con) => {
if(err) resolve(false)
con.query("SELECT * FROM thetable WHERE " + type + " = ? LIMIT 1", [what], (err, row) => {
if(err) resolve(false)
//If there were no rows found
if(row.length != 1) resolve(null)
//Resolve the user found
resolve(row[0])
})
})
})
}
/* INITIALIZE PASSPORT TO RETURN */
const initialize = (passport) => {
const authenticateUser = async (email, password, done) => {
const user = await getUserBy(email, "EMAIL")
if(user == false) return done(null, false, {message: "Unable to find this user"});
if(user == null) return done(null, false, {message: "This account and password don't match"});
//Check if the password match the database
const foundPass = await bcrypt.compare(password, user.password);
if(!foundPass) return done(null, false, { message: "This account and password don't match" })
return done(null, user)
}
passport.use(new LocalStratergy({ usernameField: 'email' }, authenticateUser));
passport.serializeUser((user, done) => done(null, user.id))
passport.deserializeUser((id, done) => done(null, getUserBy(id, "ID")))
}
Я не очень уверен, должен ли я заставить пользователя использовать обещание, но это был единственный способ, которым я сделал это работает.