I have my express server in Node app with OAuth using passport. There is no issue in registration and even with wrong credentials .But when I try to login with correct credentials the server not all responding .My url keeps on loading.
Even there is no error in console.
My passport local strategy code:
const MyStrategy = require('passport-local').Strategy
const bcrypt = require('bcrypt')
const mongoose = require('mongoose')
//User model
const User = require('./models/user')
function initialize(passport) {
const authUser = (email,password,done) =>{
User.findOne({ email : email })
.then(user =>{
if (!user) {
return done(null,false,{message: "User doesn't Exists"})
}
bcrypt.compare(password,user.password,(err,found)=>{
if (err) {
throw err
}
if (found) {
return done(null,user)
} else {
return done(null,false,{message : "Incorrect Credentials"})
}
})
})
.catch(err=>{
throw err
})
}
passport.use(new MyStrategy({ usernameField: 'email' },authUser))
passport.serializeUser((user,done) => { })
passport.deserializeUser((id,done) => { })
}
module.exports = initialize
App.js
const express = require("express");
const app = express();
const mongoose = require('mongoose')
require('dotenv').config()
const bodyParser = require("body-parser");
const ejs = require("ejs");
const passport = require('passport')
const flash = require("express-flash")
const session = require("express-session")
//DB connection
const mongo_uri = process.env.MONGODB_URI || "mongodb://localhost/testDB";
mongoose.connect(mongo_uri, {useNewUrlParser: true , useUnifiedTopology: true});
mongoose.connection.once('open', () => console.log("Connected"))
.on('npm ierror' , ()=> { console.log('Error') })
const Users = require('./models/user');
//OAuth
const UserAuth = require('./user_auth')
UserAuth(passport)
//Body Parser
app.use(express.urlencoded({extended: false}));
app.use(express.json());
//ejs
app.set('view engine', 'ejs');
app.use(express.static("public"));
//Session
app.use(session({
secret:process.env.SECRET||'secret',
saveUninitialized:false,
resave:false
}))
app.use(passport.initialize())
app.use(passport.session())
//Flash
app.use(flash())
//Routes
const regisrouter= require('./routes/register')
const indexrouter= require('./routes/index')
const homeRouter = require('./routes/home')
const composeRouter = require('./routes/compose')
const postRouter = require('./routes/post');
app.use('/',regisrouter);
app.use(indexrouter);
app.use(homeRouter);
app.use(composeRouter);
app.use('/posts',postRouter);
app.listen(3000, function() {
console.log("Server started on port 3000");
});
Login route page:
const express = require('express');
const router = express.Router()
const passport = require('passport')
router.post("/login", passport.authenticate('local',{
successRedirect: '/',
failureRedirect: '/login',
failureFlash : true
}));
router.get("/login",(req,res) =>{
res.render('index')
})
module.exports = router
I've been debugging this for 3 days but noting is improved. I guess there may be problem with async function but couldn't find anything