Reputation: 1021
After adding passport.authenticate
in a post request to the register route, I get this error. According to tutorial everything is looking fine but even my home route is not working after adding this line of code. Is there any update of passport or something?
Here is my app.js:
require('dotenv').config();
const express=require("express");
const bodyParser=require("body-parser");
const ejs=require("ejs");
const mongoose=require("mongoose");
const session=require("express-session");
const passport=require("passport")
const passportLocalMongoose=require("passport-local-mongoose");
const app=express();
app.use(express.static("public"));
app.set('view engine','ejs');
app.use(bodyParser.urlencoded({extended:true}));
app.use(session({
//js object with these properties
secret:"our little secret",
resave:false,
saveUninitialized:false
}));
app.use(passport.initialize());
app.use(passport.session);
mongoose.connect("mongodb://localhost:27017/userDB",{useNewUrlParser:true, useUnifiedTopology: true,useCreateIndex:true});
//secure way to declare schema
const userSchema=new mongoose.Schema({
email:String,
password:String
});
//used to encrypt password basically this is the complete usage of encrypt package.also accessing environment variable
userSchema.plugin(passportLocalMongoose);
const User=new mongoose.model("User",userSchema);
passport.use(User.createStrategy());
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.get("/",function(req,res){
res.render("home");
});
app.get("/login",function(req,res){
res.render("login");
});
app.get("/register",function(req,res){
res.render("register");
});
app.get("/secrets",function(req,res){
if(req.isAuthenticated()){
res.render("secrets");
}else{
res.redirect("/login")
}
})
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){
});
app.listen(3000,function(){
console.log("server running at port 3000")
});
Upvotes: 0
Views: 7091
Reputation: 118
I believe you've missed a pair of parenthesis on passport.session method call.
Try app.use(passport.session());
Upvotes: 8