Last active
May 5, 2018 12:36
-
-
Save cengiz-demir/ad47e47b82474ecfd638c56bfca470cb to your computer and use it in GitHub Desktop.
Authentication for Node.js PassportJS
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require('./handlers/passport'); | |
// Passport JS is what we use to handle our logins | |
app.use(passport.initialize()); | |
app.use(passport.session()); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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'); | |
}; | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Forget Pasword, User validator article link |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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()); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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