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



我在使用 mySQL-DB 的护照本地方面遇到了一点问题。

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

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

at/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) 

passport.serializeUser 

我得到一个

[] 

提前感谢:-(

身份验证.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('/');
});
};

模型.js

'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);
}
});

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

最新更新