Skip to content

Instantly share code, notes, and snippets.

@cengiz-demir
Last active May 5, 2018 12:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cengiz-demir/ad47e47b82474ecfd638c56bfca470cb to your computer and use it in GitHub Desktop.
Save cengiz-demir/ad47e47b82474ecfd638c56bfca470cb to your computer and use it in GitHub Desktop.
Authentication for Node.js PassportJS
require('./handlers/passport');
// Passport JS is what we use to handle our logins
app.use(passport.initialize());
app.use(passport.session());
const passport = require('passport');
const mongoose = require('mongoose');
const User = mongoose.model('User');
exports.login = passport.authenticate('local', {
failureRedirect: '/login',
failureFlash: 'Failed Login!',
successRedirect: '/',
successFlash: 'You are now logged in!'
});
exports.logout = (req, res) => {
req.logout();
req.flash('success', 'You are now logged out! 👋');
res.redirect('/');
};
exports.isLoggedIn = (req, res, next) => {
// first check if the user is authenticated
if (req.isAuthenticated()) {
next(); // carry on! They are logged in!
return;
}
req.flash('error', 'Oops you must be logged in to do that!');
res.redirect('/login');
};
const express = require('express');
const router = express.Router();
const userController = require('../controllers/userController');
const authController = require('../controllers/authController');
const { catchErrors } = require('../handlers/errorHandlers');
// Do work here
router.get('/', (req, res) => {
res.send('Hey! It works!');
});
// User Process
router.get('/login', userController.loginForm);
router.post('/login', authController.login);
router.get('/register', userController.registerForm);
// 1. Validate the registration data
// 2. register the user
// 3. we need to log them in
router.post('/register',
userController.register,
authController.login
);
router.get('/logout', authController.logout);
module.exports = router;
// Forget Pasword, User validator article link
const passport = require('passport');
const mongoose = require('mongoose');
const User = mongoose.model('User');
passport.use(User.createStrategy());
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
mongoose.Promise = global.Promise;
const passportLocalMongoose = require('passport-local-mongoose');
const userSchema = new Schema({
email: {
type: String,
unique: true,
lowercase: true,
trim: true,
required: 'Please Supply an email address'
},
name: {
type: String,
required: 'Please supply a name',
trim: true
}
});
userSchema.plugin(passportLocalMongoose, { usernameField: 'email' });
module.exports = mongoose.model('User', userSchema);
const mongoose = require('mongoose');
const User = mongoose.model('User');
const promisify = require('es6-promisify');
exports.loginForm = (req, res) => {
res.render('login', { title: 'Login' });
};
exports.registerForm = (req, res) => {
res.render('register', { title: 'Register' });
};
exports.register = async (req, res, next) => {
const user = new User({ email: req.body.email, name: req.body.name });
const register = promisify(User.register, User);
await register(user, req.body.password);
next(); // pass to authController.login
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment