I'm newbie in authentication i'm stuck from 3 days I try googling to solve the problem but still stuck at the same point.
use Passport to register a new user and log in, this new user saves in the database but when I want to login I got 404 Not Found.
when my user register and login using passport js he will login and store cookie in browser that receive from database
details
index.js File: This file initializes your Express application, sets up middleware, and starts the server.
mongoose.js File: This file establishes a connection to your MongoDB database.
passport.js File: Passport.js handles user authentication. Ensure that your Local Strategy is correctly configured to authenticate users against your database.
user_controller.js File: This file contains controller methods for user-related actions like signing up, signing in, creating users, and managing sessions. Make sure redirection after user creation and login is configured correctly.
user.js Router File: This file defines routes for user-related actions. Check that routes are correctly mapped to controller methods and that redirection is set up properly.
this is index.js file
const express = require('express');
const path = require('path');
const expressLayouts = require('express-ejs-layouts');
const db = require('./config/mongoose');
const cookieParser = require('cookie-parser');
const session = require('express-session');
const passport = require('passport');
const passportLocal = require('./config/passport-local-strategy');
const app = express();
const port = 8000;
app.use(expressLayouts);
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'assets')));
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));
app.use(session({
name: 'codeial',
secret: "Adnan",
saveUninitialized: false,
resave: false,
cookie: {
maxAge: (1000 * 60 * 100)
}
}));
app. use(passport. initialize());
app. use(passport. Session());
app. use('/', require('./routes/index'));
app.listen(port, (err) => {
if (err) {
console.log(`Error in running the server: ${err}`);
return;
}
console.log(`Server is running on port: ${port}`);
});
this is mongoose.js file
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/codeial_development')
const db = mongoose.connection;
db.on('error', console.error.bind(console , 'error connecting to db'));
db.once('open', function(){
console.log('successfullly connect to the databbase');
})
this is passport.js file
//plemented Passport's Local Strategy for user authentication
//import passport
const passport = require('passport');
//import LocalStrategy
const LocalStrategy = require('passport-local').Strategy;
const User = require('../models/user')
passport.use(new LocalStrategy({
usernameField: 'email'
},
function(email, password, done){
User.findOne({email: email}, function(err, user){
if(err){
console.log('Error in finding user --> Passport');
return done(err);
}
if(!user || user.password != password){
console.log('Invalid username/password');
return done(null, false);
}
return done(null, user);
});
}));
passport.serializeUser(function(user , done){
done(null , user.id);
})
passport.deserializeUser(function(id , done){
User.findById(id , function(err , user){
if(err){
console.log('Error in finding user --> Passport');
}
return done(null , user)
})
})
passport.checkAuthentication = function(req, res , next) {
//if the user is signed in , then pass on the request to the next function ( controller action )
if(req.isAuthenticated()){
return next();
}
//if the user is not sign in
return res.redirect('/users/sign-in')
}
passport.setAuthenticationUser = function( req, res , next){
if(req.isAuthenticated()){
//container the current signed in user from the session cookie and we are just sending this to the local views
res.locals.user = req.user;
}
next()
}
module.exports=passport;
this is user_controller.js
Implemented controller methods for sign-up, sign-in, user creation, and session handling.
const User = require('../models/user');
module.exports.profile = function (req, res) {
if (req.isAuthenticated()) {
return res.render('user_profile', {
title: 'User profile',
user: req.user
});
} else {
return res.redirect('/users/sign-in');
}
};
module.exports.signUp = function (req, res) {
return res.render('user_sign_up', {
title: "Codeial | Sign Up "
});
};
module.exports.signIn = function (req, res) {
return res.render("user_sign_in", {
title: "Codeial | Sign In"
});
};
module.exports.create = function (req, res) {
if (req.body.password !== req.body.confirm_password) {
return res.redirect('back');
}
User.findOne({ email: req.body.email }).then(user => {
if (!user) {
return User.create(req.body)
.then(newUser => res.redirect('/users/sign-in'))
.catch(err => {
console.log('Error in creating user:', err);
return res.redirect('back');
});
} else {
return res.redirect('/users/sign-in');
}
}).catch(err => {
console.log('Error in finding user in signing up:', err);
return res.redirect('back');
});
};
module.exports.createSession = function (req, res) {
return res.redirect('/');
};
this is user.js router file
const express = require('express');
const router = express.Router();
const passport = require('passport');
const userController = require('../controllers/users_controller');
// Define routes
router.get('/profile', userController.profile);
router.get('/sign-up', userController.signUp);
router.get('/sign-in', userController.signIn);
router.post('/create', userController.create);
router.post('/create-session', passport.authenticate(
'local',
{ failureRedirect: '/users/sign-in' }
), userController.createSession);
module.exports = router;
};