I am writing a simple register/login page with passportLocalMongoose. I am working on my register page for users, I am able to store all the data into mongodb once I click register button, but when I am trying to redirct to the authenticated page I am getting an error :
MongooseError: Query.prototype.exec() no longer accepts a callback
Here is my code
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const express = require('express')
const ejs = require("ejs");
const session = require('express-session');
const passport = require("passport");
const passportLocalMongoose = require("passport-local-mongoose");
const app = express()
app.use(bodyParser.urlencoded({ extended: true }))
app.set('view engine', 'ejs');
app.use(express.static("public"));
app.use(session({
secret:'the s key',
resave:false,
saveUninitialized:false
}));
app.use(passport.initialize());
app.use(passport.session());
mongoose.connect("mongodb://0.0.0.0:27017/userDB", {useNewUrlParser: true});
const userSchema = new mongoose.Schema({
username:String,
password:String,
tbd:String
});
//hash and salt psw and save users to db
userSchema.plugin(passportLocalMongoose);
const User = mongoose.model('User', userSchema);
passport.use(User.createStrategy());
// passport.use(new LocalStrategy({
// usernameField: 'email',
// },User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.get('/test', function(req,res){
res.render('test');
});
app.get('/login', function(req,res){
res.render('login');
});
app.get('/register',function(req,res){
res.render('register');
});
app.get('/',function(req,res){
res.redirect('login');
});
app.get("/mainpage",function(req,res){
if(req.isAuthenticated()){
console.log(req.isAuthenticated());
res.render('/mainpage');
}else{
console.log(req.isAuthenticated());
res.redirect('login');
}
});
app.get('/logout',function(req,res){
req.logout();
res.redirct('/login')
})
app.post('/login',function(req,res){
const user = new User({
username:req.body.username,
password:req.body.psw
});
req.login(user,function(err){
if (err) {
console.log(err);
}else{
passort.authenticate("local")(req, res, function(){
res.redirct("/mainpage")
})
}
});
});
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').then(()=> {
res.redirect("/mainpage");
})
}
});
});
app.listen(3000, function() {
console.log("Server started on port 3000");
});
Your passport authenticate will be like the following and try again.
On thing to be noted that make sure you have created the strategy of
localinapp.jsmain. Place the following code inapp.js:And Make sure to send the field
usernameandpasswordfrom in request from frontend form:Try this, I hope this help.