NodeJS中带有MySQL的Passportjs

Passportjs with MySQL in NodeJS

本文关键字:Passportjs MySQL NodeJS      更新时间:2024-03-26

大家好,我试图通过passport.js连接到MySQL数据库来验证用户,我不知道我的源代码出了什么问题。当我提供正确或错误的用户和密码信息时,会导致重定向失败。有人能告诉我怎么了吗?我是新手。

这是我的源代码:

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

并且闪光消息也不起作用。请告诉我,我几乎在这方面花了很多时间,我没有犯任何错误。我不知道怎么解决这个问题。

要序列化用户,您需要发送user.id而不是用户

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

使用MySQL 检查此gist Passport js

查看带有MySQL 的完整节点应用程序Passport js

序列化和反序列化用户并不是一件小事。您应该通过user.id序列化用户,并通过给定的id查找该用户来反序列化用户。

顺便说一句,在将密码存储到数据库中之前,请确保对其进行了盐析。存储纯文本密码是一个很大的禁忌。