User Authentication (Passport.js)

Passport is an authentication middleware for Node.js. It's extremely flexible and modular, allowing you to plug in different "strategies" like Local, Google, GitHub, etc.

1. Installation

npm install passport passport-local

2. Conceptual Workflow

  1. Initialize Passport in your app.
  2. Define a Strategy (e.g., how to verify a username and password).
  3. Configure Serialization (saving user info to session).
  4. Use passport.authenticate() in your routes.

3. Local Strategy Example

const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;

passport.use(new LocalStrategy(
  function(username, password, done) {
    User.findOne({ username: username }, function (err, user) {
      if (err) { return done(err); }
      if (!user) { return done(null, false); }
      if (!user.verifyPassword(password)) { return done(null, false); }
      return done(null, user);
    });
  }
));

4. Protecting Routes

Create a simple helper to check if the user is authenticated.

function checkAuth(req, res, next) {
  if (req.isAuthenticated()) return next();
  res.redirect('/login');
}

app.get('/dashboard', checkAuth, (req, res) => {
  res.render('dashboard', { user: req.user });
});
Choosing Auth: Use Sessions/Passport for traditional web apps and JWT for stateless APIs.