Должен ли я использовать req.user или req.session.passport - PullRequest
1 голос
/ 23 марта 2020

Я использую 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")))

}

Я не очень уверен, должен ли я заставить пользователя использовать обещание, но это был единственный способ, которым я сделал это работает.

...