登录时无法将用户序列化到会话中



用户注册部分成功,但是在登录时,即使我定义了serializeUserdeserializeUser,我也无法将用户序列化到会话中

序列化和反序列化是从node.js.的passport.js中间件中使用的

使用的包裹(均来自npm(:护照,护照本地,护照本地猫鼬,快递会话

错误日志:已成功在端口3000上运行错误:未能将用户序列化到会话

const app = express();

app.use(express.static("public"));
app.set('view engine','ejs');
app.use(bodyParser.urlencoded({extended:true}));

secrets = process.env.SECRETS;

//using the session
app.use(session({
secret:secrets,
resave:false,
saveUninitialized:false
}));

//initializing and using passport
app.use(passport.initialize());
app.use(passport.session());


//connect the db
mongoose.connect("mongodb://localhost:27017/userDB",{useNewUrlParser:true, useUnifiedTopology: true});
//create schema
const userSchema = new mongoose.Schema({
email : String,
password : String
});
//avoid warning, USE: useCreateIndex
mongoose.set("useCreateIndex",true);


//adding passportLocal plugin
userSchema.plugin(passportLocalMongoose);



//mongoose-encryption
userSchema.plugin(encrypt,{secret:secrets,encryptedFields:["password"]});

//create model
const User = mongoose.model("User",userSchema);

//passportLocal config
passport.use(User.createStrategy());

passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());



///////GET///////////
app.get("/",function(req,res){
res.render("home");
});

app.get("/register",function(req,res){
res.render("register");
});

app.get("/login",function(req,res){
res.render("login");
});

app.get("/secrets",function(req,res){
if(req.isAuthenticated()){
res.render("secrets");
} else {
res.redirect("/login");
}
});

app.get("/logout",function(req,res){
req.logout();
res.redirect("/");
});


///////POST///////////
app.post("/register",function(req,res){

User.register({username:req.body.username},req.body.password,function(err,user){
if(err){
console.log(err);
res.redirect("/register");
} else {
passport.authenticate("local")(req,res,function(){
res.redirect("/secrets");
});
}
});

});

app.post("/login",function(req,res){
const user = new User({
email : req.body.username,
password : req.body.password
});

req.login(user,function(err){
if(err){
console.log(err);

} else {
passport.authenticate("local")(req,res,function(){
res.redirect("/secrets");
});
}
});
});


app.listen(3000,function(){
console.log("Successfully running on port 3000");
})
您需要serializeUser/deserializeUser
passport.serializeUser((user, done)=> {done(null, user); });
passport.deserializeUser((user, done)=>{done(null, user);
});

最新更新