users.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. var express = require('express');
  2. var router = express.Router();
  3. var passport = require('passport');
  4. var LocalStrategy = require('passport-local').Strategy;
  5. var User = require('../models/user');
  6. // Login
  7. router.get('/login', ensureNoAuthentication, function(req, res){
  8. res.render('login');
  9. });
  10. router.get('/register', ensureNoAuthentication, function(req, res){
  11. res.render('register');
  12. });
  13. function ensureNoAuthentication(req, res, next) {
  14. if(!req.isAuthenticated()) {
  15. return next();
  16. } else {
  17. //req.flash('error_msg', 'You are not logged in');
  18. res.redirect('/');
  19. }
  20. }
  21. // Register User
  22. router.post('/register', function(req, res){
  23. req.checkBody('email', 'Email is required').notEmpty();
  24. req.checkBody('email', 'Email is not valid').isEmail();
  25. req.checkBody('password', 'Password is required').notEmpty();
  26. req.checkBody('password2', 'Passwords do not match').equals(req.body.password);
  27. var errors = req.validationErrors();
  28. if(errors){
  29. res.render('register', {errors: errors});
  30. } else {
  31. var newUser = new User({
  32. email: req.body.email,
  33. password: req.body.password,
  34. });
  35. User.createUser(newUser, function(err, user){
  36. if(err) throw err;
  37. console.log(user);
  38. });
  39. req.flash('success_msg', 'You are registered and can now login');
  40. res.redirect('/users/login');
  41. }
  42. });
  43. passport.use(new LocalStrategy({
  44. usernameField: 'email',
  45. passwordField: 'password'
  46. },
  47. function(email, password, done) {
  48. User.getUserByEmail(email, function(err, user) {
  49. if (err) throw err;
  50. if (!user) {
  51. return done(null, false, { message: 'Unknown User' });
  52. }
  53. User.comparePassword(password, user.password, function(err, isMatch){
  54. if(err) throw err;
  55. if(isMatch){
  56. return done(null, user);
  57. } else {
  58. return done(null, false, { message: 'Invalid password' });
  59. }
  60. });
  61. });
  62. }
  63. ));
  64. passport.serializeUser(function(user, done) {
  65. done(null, user.id);
  66. });
  67. passport.deserializeUser(function(id, done) {
  68. User.getUserById(id, function(err, user) {
  69. done(err, user);
  70. });
  71. });
  72. router.post('/login',
  73. passport.authenticate('local', {successRedirect: '/', failureRedirect: '/users/login', failureFlash: true}),
  74. function(req, res) {
  75. });
  76. router.get('/logout', function(req, res) {
  77. req.logOut();
  78. req.flash('success_msg', 'You are logged out');
  79. res.redirect('/users/login');
  80. });
  81. module.exports = router;