大家好我尝试连接MySQL数据库通过passport.js
验证用户,我不知道我的源代码有什么问题。当我提供正确或错误的用户和密码信息时,会导致重定向失败。谁能告诉我什么是错的?我是新手。
这是我的源代码:
var flash = require('connect-flash');
var express = require('express');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(function(username,password,done){
connection.query("select * from userinfo where UserName='"+username+"' ",function(err,user){
if(err)
{
return done(err);
}
if(!user)
{
return done(null,false,{message: 'Incorrect user name'});
}
if(user.password != password)
{
return done(null,false,{message: 'Incorrect password'});
}
return done(null,user);
});
}
));
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(user, done) {
done(null, user);
});
app.post('/validates', passport.authenticate('local',{successRedirect: '/productdisplay', failureRedirect: '/validate', failureFlash: true }));
并且flash消息也不起作用。请告诉我,我几乎花了很多时间在这里,我没有得到任何错误。我不知道如何解决这个问题。
答案 0 :(得分:0)
序列化用户需要发送user.id而不是用户
passport.serializeUser(function(user, done) {
done(null, user.id);
});
检查这个要点Passport js with MySQL
查看完整节点应用Passport js with MySQL
答案 1 :(得分:0)
对用户进行序列化和反序列化并不是一件容易的事。您应该通过user.id
序列化用户,并通过给定的id
查找该用户来反序列化该用户。
作为旁注,在将密码存储在数据库中之前,请确保已对密码加盐。纯文本密码是一个很大的禁忌。