const express=require("express");
const bcrypt = require("bcrypt");
const mongoose=require("mongoose");
const session=require("express-session");
const bodyParser = require("body-parser");
const MongoStore=require("connect-mongo");
const passport = require("passport");
const LocalStrategy = require("passport-local").Strategy;
const app=express();
const MongoLink="mongodb://127.0.0.1:27017/cookiesDB";
mongoose.connect(MongoLink).then(()=>{
console.log('successfully connected');
}).catch((error)=>{
console.log("error not connected: " , error);
});
const UserSchema = new mongoose.Schema({
username:String,
email:String,
hash:String
});
const User = new mongoose.model("User" , UserSchema);
const mongoURL="mongodb://127.0.0.1:27017/SesssionDB";
app.use(bodyParser.urlencoded({extended:true}));
app.set("view engine","ejs");
app.use(session({
secret:"this is my secret!!!",
resave:false,
saveUninitialized:false,
store:MongoStore.create({
mongoUrl:mongoURL,
collectionName:'sessions'
}),
cookie:{
maxAge:60000
}
}));
async function VerifyStrat(email, password , done){
console.log("function reached");
try {
const data = await User.findOne({email: email});
if (!data) {
console.log("User not found");
return done(null, false);
}
const isValidPassword = await bcrypt.compare(password, data.hash);
if (isValidPassword) {
console.log("User authenticated");
return done(null, data);
} else {
console.log("Incorrect password");
return done(null, false);
}
} catch (error) {
console.error(error);
return done(error);
}
}
passport.use(new LocalStrategy(VerifyStrat));
passport.serializeUser(function(User, done) {
done(null, User.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, User) {
done(err, User);
});
});
app.use(passport.initialize());
app.use(passport.session());
app.get("/",function(req,res){
res.render("home");
})
app.get("/login" , function(req,res){
res.render("login");
});
app.post('/login',passport.authenticate("local",{successRedirect:"/secret" , failureRedirect: "/login"}));
app.get("/register",function(req,res){
res.render("register");
});
const saltrounds=10;
app.post("/register" ,async function(req,res){
const un = req.body.username;
const email = req.body.email;
try {
const hashedpsw = await bcrypt.hash(req.body.password , saltrounds);
console.log(hashedpsw);
const NewUser = new User({
username:un,
email:email,
hash:hashedpsw
});
NewUser.save();
} catch (error) {
res.status(500).send("error internal server");
}
res.redirect("/login");
});
function isAuth(req,res,next){
if(req.isAuthenticated()){
return next();
}else{
res.redirect("/login");
}
}
app.get("/secret" ,isAuth,function(req,res){
res.send("hello this is a secret page");
});
app.listen(3000,function(req,res){
console.log("server successfully running on port 3000");
})
when i send a post request with user data to the post route i always get redirected to the login page even if the data is correct , im using passport local strategy and i couldnt debugg the error , I have looked at the passpot local strategy documentation and i think i have followed everything that was mentioned there . can you please help me if you could ?