Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql passport错误:无法将用户序列化到会话中_Mysql_Node.js_Express_Passport.js_Passport Local - Fatal编程技术网

Mysql passport错误:无法将用户序列化到会话中

Mysql passport错误:无法将用户序列化到会话中,mysql,node.js,express,passport.js,passport-local,Mysql,Node.js,Express,Passport.js,Passport Local,我对使用mySQL数据库的passport local有点问题 我尝试登录时收到以下错误消息: 错误:无法将用户序列化到会话中 在/your/path/to/project/auth.js:11:5 这个问题似乎还可以。我得到了正确的对象作为响应 [ RowDataPacket { id: 1, firstname: 'firstname', lastname: 'lastname', username: 'username', password: 'pa

我对使用mySQL数据库的passport local有点问题

我尝试登录时收到以下错误消息:

错误:无法将用户序列化到会话中

在/your/path/to/project/auth.js:11:5

这个问题似乎还可以。我得到了正确的对象作为响应

[ RowDataPacket {
    id: 1,
    firstname: 'firstname',
    lastname: 'lastname',
    username: 'username',
    password: 'password in hash',
    role: 'role',
    enabled: 1 } ]
但是如果我

console.log(user) 

我得到一份工作

[] 
提前感谢:-)

auth.js

const passport = require('passport');
const expressSession = require('express-session');
const LocalStrategy = require('passport-local');
const crypto = require('crypto');

const userModel = require('./user/model');

module.exports = app => {
  passport.serializeUser(function(user, done){
    //console.log(user.id);
    done(null, user.id);
  })
  //passport.serializeUser((user, done) => done(null, user.id));
  passport.deserializeUser((id, done) => {
    userModel.get({ id }).then(
      user => {
        if (!user) {
          done('user not found');
        }
        done(null, user);
      },
      err => done(err),
    );
  });

  passport.use(
    new LocalStrategy((username, password, done) => {
      
      const hash = crypto
        .createHash('md5')
        .update(password)
        .digest('hex');
        console.log({password: hash});
      userModel.get({ username, password: hash }).then(
        user => {
          if (!user) {
            done('user not found');
          }
          //console.log(user);
          done(null, user);
        },
        error => done('FEHLER: ' + error),
      );
    }),
  );

  app.use(
    expressSession({
      secret: 'geheim',
      resave: false,
      saveUninitialized: true,
      cookie: {secure: true}
    }),
  );

  app.use(passport.initialize());
  app.use(passport.session());

  app.post(
    '/login',
    passport.authenticate('local', { failureRedirect: '/login' }),
    (request, response) => {
      response.redirect('/');
    },
  );
  app.get('/logout', (req, res) => {
    req.logout();
    res.redirect('/');
  });
};
'use strict';
const dbServerConnection = require('../controller/mysqlconnector.js');

function get(query = {}) {
    return new Promise((resolve, reject) => {
      let queryElements = [];
      if (query) {
        for (let key in query) {
          queryElements.push(`${key} = ?`);
        }
      }
  
      const queryString =
        'SELECT * FROM usertable WHERE ' + queryElements.join(' AND ');
      dbServerConnection.query(queryString, Object.values(query), (error, results) => {
        if (error) {
          reject(error);
        } else {
            console.log(results);
          resolve(results);
        }
      });
    });
  }
  
  module.exports = {
    get,
  };
model.js

const passport = require('passport');
const expressSession = require('express-session');
const LocalStrategy = require('passport-local');
const crypto = require('crypto');

const userModel = require('./user/model');

module.exports = app => {
  passport.serializeUser(function(user, done){
    //console.log(user.id);
    done(null, user.id);
  })
  //passport.serializeUser((user, done) => done(null, user.id));
  passport.deserializeUser((id, done) => {
    userModel.get({ id }).then(
      user => {
        if (!user) {
          done('user not found');
        }
        done(null, user);
      },
      err => done(err),
    );
  });

  passport.use(
    new LocalStrategy((username, password, done) => {
      
      const hash = crypto
        .createHash('md5')
        .update(password)
        .digest('hex');
        console.log({password: hash});
      userModel.get({ username, password: hash }).then(
        user => {
          if (!user) {
            done('user not found');
          }
          //console.log(user);
          done(null, user);
        },
        error => done('FEHLER: ' + error),
      );
    }),
  );

  app.use(
    expressSession({
      secret: 'geheim',
      resave: false,
      saveUninitialized: true,
      cookie: {secure: true}
    }),
  );

  app.use(passport.initialize());
  app.use(passport.session());

  app.post(
    '/login',
    passport.authenticate('local', { failureRedirect: '/login' }),
    (request, response) => {
      response.redirect('/');
    },
  );
  app.get('/logout', (req, res) => {
    req.logout();
    res.redirect('/');
  });
};
'use strict';
const dbServerConnection = require('../controller/mysqlconnector.js');

function get(query = {}) {
    return new Promise((resolve, reject) => {
      let queryElements = [];
      if (query) {
        for (let key in query) {
          queryElements.push(`${key} = ?`);
        }
      }
  
      const queryString =
        'SELECT * FROM usertable WHERE ' + queryElements.join(' AND ');
      dbServerConnection.query(queryString, Object.values(query), (error, results) => {
        if (error) {
          reject(error);
        } else {
            console.log(results);
          resolve(results);
        }
      });
    });
  }
  
  module.exports = {
    get,
  };

也许您的
RowDataPacket
不是普通对象,所以我想您需要更改代码

dbServerConnection.query(queryString, Object.values(query), (error, results) => {
        if (error) {
          reject(error);
        } else {
          console.log(results);
          resolve(results);
        }
      });

?