Advertisement
Guest User

Untitled

a guest
Jun 20th, 2017
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.17 KB | None | 0 0
  1. const express = require('express');
  2. const router = express.Router();
  3. const passport = require('passport');
  4. const LocalStrategy = require('passport-local').Strategy;
  5. const multer = require('multer');
  6.  
  7. const User = require('../models/user');
  8.  
  9.  
  10. const storage = multer.diskStorage({
  11. destination: function (req, file, cb) {
  12. cb(null, 'public/uploads/avatars/')
  13. },
  14. filename: function (req, file, cb) {
  15. const ext = file.originalname.split('.').pop()
  16. cb(null, req.body.username+'.'+ext)
  17. }
  18. });
  19.  
  20. const validateRegisterForm = function(req){
  21. console.log(req.body.ext);
  22. req.checkBody('name', 'Name is required').notEmpty();
  23. req.checkBody('email', 'Email is required').notEmpty();
  24. req.checkBody('email', 'Email is not valid').isEmail();
  25. req.checkBody('username', 'Username is required').notEmpty();
  26. req.checkBody('password', 'Password is required').notEmpty();
  27. req.checkBody('password2', 'Passwords do not match').equals(req.body.password);
  28. req.checkBody('ext', 'Uploaded file not an image').isValidImage();
  29. }
  30.  
  31. const upload = multer({
  32. storage: storage,
  33. fileFilter: function(req, file, cb){
  34. validateRegisterForm(req)
  35. req.getValidationResult().then(function(result) {
  36. cb(null, result.isEmpty())
  37. });
  38. }
  39. });
  40.  
  41. // Register
  42. router.get('/register', function(req, res){
  43. if(req.isAuthenticated())
  44. res.redirect('/');
  45. else{
  46. const oldForm = req.session.oldForm;
  47. if(oldForm)
  48. delete req.session.oldForm;
  49. res.render('register', {'old_form' : oldForm});
  50. }
  51. });
  52.  
  53. // Login
  54. router.get('/login', function(req, res){
  55. if(req.isAuthenticated())
  56. res.redirect('/');
  57. else{
  58. const oldFormUsername = req.session.oldFormUsername;
  59. if(oldFormUsername)
  60. delete req.session.oldFormUsername;
  61. res.render('login', {'oldFormUsername' : oldFormUsername});
  62. }
  63. });
  64.  
  65. // Register User
  66. router.post('/register', upload.single('avatar'), function(req, res){
  67. const {name, email, username, password, password2} = req.body;
  68. const hasAvatar = (req.file) ? true : false;
  69.  
  70. const respondError = (req, errors) => {
  71. req.flash('form_errors', errors.useFirstErrorOnly().array());
  72. req.session.oldForm = {
  73. name : name,
  74. email: email,
  75. username: username,
  76. password: password,
  77. password2: password2,
  78. };
  79. res.redirect('/users/register')
  80. }
  81.  
  82. if(!hasAvatar)
  83. validateRegisterForm(req);
  84.  
  85. req.getValidationResult().then(errors => {
  86. if(errors.isEmpty()){
  87. User.getUserByUsername(req.body.username.toLowerCase(), (err, user) => {
  88. if(err) throw err;
  89. if(user)
  90. req.checkBody('username', 'Username already exists').notEqual(user.username.toLowerCase());
  91. if(!errors.isEmpty()){
  92. respondError(req, res)
  93. } else {
  94. const newUser = new User({
  95. name: name,
  96. email:email,
  97. username: username,
  98. password: password,
  99. hasAvatar : hasAvatar
  100. });
  101.  
  102. User.createUser(newUser, (err, user) => {
  103. if(err) throw err;
  104. });
  105. req.flash('success_msg', 'You are registered and can now login');
  106. res.redirect('/users/login');
  107. }
  108. });
  109. } else {
  110. respondError(req, errors)
  111. }
  112. });
  113. });
  114.  
  115. passport.use(new LocalStrategy(
  116. function(username, password, done) {
  117. User.getUserByUsername(username, function(err, user){
  118. if(err) throw err;
  119. if(!user){
  120. return done(null, false, {message: 'Invalid username'});
  121. }
  122.  
  123. User.comparePassword(password, user.password, function(err, isMatch){
  124. if(err) throw err;
  125. if(isMatch){
  126. return done(null, user);
  127. } else {
  128. return done(null, false, {message: 'Invalid password'});
  129. }
  130. });
  131. });
  132. }));
  133.  
  134. passport.serializeUser(function(user, done) {
  135. done(null, user.id);
  136. });
  137.  
  138. passport.deserializeUser(function(id, done) {
  139. User.getUserById(id, function(err, user) {
  140. done(err, user);
  141. });
  142. });
  143.  
  144. router.post('/login',
  145. passport.authenticate('local', {successRedirect:'/', failureRedirect:'/users/login',failureFlash: true}),
  146. function(req, res) {
  147. res.redirect('/');
  148. });
  149.  
  150. router.get('/logout', function(req, res){
  151. req.logout();
  152.  
  153. req.flash('success_msg', 'You are logged out');
  154.  
  155. res.redirect('/users/login');
  156. });
  157.  
  158. module.exports = router;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement