Passport.js - вставляет 'null' в базу данных вместо имени пользователя - PullRequest
0 голосов
/ 24 ноября 2018

Не удается создать пользователя с полями Id, username и password.Он говорит, что insertId не определен, однако, когда я цитирую цитируемый код в приведенном ниже коде, он вроде работает, за исключением того, что в качестве имени пользователя в базе данных он помещает «ноль» и правильно перенаправляет меня на страницу профиля.Любые идеи?

var LocalStrategy = require("passport-local").Strategy;

var mysql = require('mysql');
var bcrypt = require('bcrypt-nodejs');
var dbconfig = require('./database');
var connection = mysql.createConnection(dbconfig.connection);

connection.query('USE ' + dbconfig.database);

module.exports = function(passport) {
 passport.serializeUser(function(user, done){
  done(null, user.id);
 });

 passport.deserializeUser(function(id, done){
  connection.query("SELECT * FROM users WHERE id = ? ", [id],
   function(err, rows){
    done(err, rows[0]);
   });
 });

 passport.use(
  'local-signup',
  new LocalStrategy({
   usernameField : 'username',
   passwordField: 'password',
   passReqToCallback: true
  },
  function(req, username, password, done){
   connection.query("SELECT * FROM users WHERE username = ? ", 
   [username], function(err, rows){
    if(err)
     return done(err);
    if(rows.length){
     return done(null, false, req.flash('signupMessage', 'That is already taken'));
    }else{
     var newUserMysql = {
      username: username,
      password: bcrypt.hashSync(password, null, null),
     };

     var insertQuery = "INSERT INTO users (username, password) values (?, ?)";

     connection.query(insertQuery, [/*newUserMysql.id,*/ newUserMysql.username, newUserMysql.password],
      function(err, rows){
       newUserMysql.id = insertId;

       return done(null, newUserMysql);
      });
    }
   });
  })
 );

 passport.use(
  'local-login',
  new LocalStrategy({
   usernameField : 'username',
   passwordField: 'password',
   passReqToCallback: true
  },
  function(req, username, password, done){
   connection.query("SELECT * FROM users WHERE username = ? ", [username],
   function(err, rows){
    if(err)
     return done(err);
    if(!rows.length){
     return done(null, false, req.flash('loginMessage', 'No User Found'));
    }
    if(!bcrypt.compareSync(password, rows[0].password))
     return done(null, false, req.flash('loginMessage', 'Wrong Password'));

    return done(null, rows[0]);
   });
  })
 );
};

Любые предложения / комментарии будут с благодарностью.Я попытался добавить поле Id в переменные newUserMySql, но оно просто вызывает его еще больше.

Редактировать: Внезапно, даже когда я раскомментирую код, ошибка говорит, что inserttid не определен, и он отключаетсясервер.Кажется, компилируется по-разному каждый раз, когда я запускаю его.

...