Паспорт. js код для локальной стратегии не работает правильно для модуля входа - PullRequest
0 голосов
/ 20 апреля 2020

Итак, я пытался внедрить аутентификацию пользователей для своего проекта, следуя видео-уроку "Web Dev Simplified" - https://youtu.be/-RCnNyD0L-s?t=1011

И я использовал точно такой же код как он (за исключением того, что я использовал mysql базу данных для хранения данных, в то время как он использовал массив). Весь код для регистрации пользователя работает нормально, но часть входа не работает. Весь код конфигурации паспорта записан в файле passport-config. js.

Проблема в том, что моя функция getUserById в файле passport-config. js файл не возвращает пользователя, даже если он есть в результате, возвращенном функцией mysql.query() (я могу это подтвердить потому что console.log(result[0]) в приложении. js фактически печатает объект пользователя). Когда я console.log(user) в файле passport-config. js, он печатает undefined.

Я думаю, что знаю, в чем проблема, но не знаю, как ее исправить. Как видно из фрагмента терминала (прилагается ниже), пользователь из passport-config. js печатается до того, как пользователь будет прочитан и возвращен в файл приложения. js.

Это мое приложение. js file:

const express = require("express");
const mysql = require('mysql');
const bodyparser = require('body-parser');
const bcrypt = require('bcryptjs');
const passport = require('passport');
const flash = require('express-flash');
const session = require('express-session');
const methodOverride = require('method-override');

const app = express();

const initializePassport = require('./passport-config')
initializePassport(
  passport,
  email_id =>{
       mysqlConnection.query("SELECT * FROM user_tbl WHERE email_id= "+mysql.escape(email_id), (err, result, fields) => {

        if (!err){

            if(result.length==0)
                return null;
            else{
                console.log(result[0]]);
                return result[0];
            }
        }
        else
            console.log(err);
            return null;
    })
  }
)

А это файл паспорта-конфигурации:

const LocalStrategy = require('passport-local').Strategy
const bcrypt = require('bcryptjs')

function initialize(passport, getUserByEmail) {
  const authenticateUser = async (email_id, password, done) => {
    const user = getUserByEmail(email_id)
    console.log("logging user:"+user)                               //"This prints undefined.WHYY?!?!?"
    if (user == null) {
      return done(null, false, { message: 'No user with that email' })
    }

    try {
      if (await bcrypt.compare(password, user.password)) {
        return done(null, user)
      } else {
        return done(null, false, { message: 'Password incorrect' })
      }
    } catch (e) {
      return done(e)
    }
  }

  passport.use(new LocalStrategy({ usernameField: 'email_id' }, authenticateUser))
  passport.serializeUser((user, done) => done(null, user.email_id))
  passport.deserializeUser((email_id, done) => {
    return done(null, getUserByEmail(email_id))
  })

}

module.exports = initialize

Это терминал после отправки формы входа в систему:

[nodemon] starting `node app.js`
Server has started on port 3010
Connection Established Successfully
logging user:undefined
RowDataPacket {
  email_id: 'someuser@hotmail.com',
  password: '$2a$05$Gvyn0CPZ0u8i93rZ9TTVPOvDYGlFbkaxiwIeUZIKmOgvspyWYjySC',
  user_name: 'someuser',
  mobile_no: 8377564281,
  address: 'some address',
  type_id: 3
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...