Advertisement
Guest User

Untitled

a guest
Dec 9th, 2016
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.96 KB | None | 0 0
  1. var mongoose = require('mongoose');
  2. var User = mongoose.model('User');
  3. // Makes it work locally
  4. var LocalStrategy = require('passport-local').Strategy;
  5. var bCrypt = require('bcrypt-nodejs');
  6.  
  7. module.exports = function (passport) {
  8.  
  9. // Passport needs to be able to serialize and deserialize users to support persistent login sessions
  10. passport.serializeUser(function (user, done) {
  11. console.log('serializing user:', user.username);
  12. done(null, user._id);
  13. });
  14.  
  15. passport.deserializeUser(function (id, done) {
  16. User.findById(id, function (err, user) {
  17. console.log('deserializing user:', user.username);
  18. done(err, user);
  19. });
  20. });
  21.  
  22. // login
  23. passport.use('login', new LocalStrategy({
  24. passReqToCallback: true
  25. },
  26. function (req, username, password, done) {
  27. // check in mongo if a user with username exists or not
  28. User.findOne({ 'username': username },
  29. function (err, user) {
  30. // In case of any error, return using the done method
  31. if (err)
  32. return done(err);
  33. // Username does not exist, log error & redirect back
  34. if (!user) {
  35. console.log('User Not Found with username ' + username);
  36. return done(null, false)
  37. }
  38. // User exists but wrong password, log the error
  39. if (!isValidPassword(user, password)) {
  40. console.log('Invalid Password');
  41. return done(null, false);
  42. }
  43. // User and password both match, return user from
  44. // done method which will be treated like success
  45. return done(null, user);
  46. }
  47. );
  48. }));
  49.  
  50. passport.use('signup', new LocalStrategy({
  51. passReqToCallback: true
  52. },
  53. function (req, username, password, done) {
  54. findOrCreateUser = function () {
  55. // find a user in Mongo with provided username
  56. User.findOne({ 'username': username }, function (err, user) {
  57. // In case of any error return
  58. if (err) {
  59. console.log('Error in SignUp: ' + err);
  60. return done(err);
  61. }
  62. // already exists
  63. if (user) {
  64. console.log('User already exists');
  65. return done(null, false);
  66. } else {
  67. // if there is no user with that email
  68. // create the user
  69. var newUser = new User();
  70. // set the user's local credentials
  71. newUser.username = username;
  72. newUser.password = createHash(password);
  73.  
  74. // save the user
  75. newUser.save(function (err) {
  76. if (err) {
  77. console.log('Error in Saving user: ' + err);
  78. throw err;
  79. }
  80. console.log('User Registration succesful');
  81. return done(null, newUser);
  82. });
  83. }
  84. });
  85. };
  86.  
  87. // Delay the execution of findOrCreateUser and execute
  88. // the method in the next tick of the event loop
  89. process.nextTick(findOrCreateUser);
  90. }));
  91.  
  92. var isValidPassword = function (user, password) {
  93. return bCrypt.compareSync(password, user.password);
  94. };
  95.  
  96. // Generates hash using bCrypt
  97. var createHash = function (password) {
  98. return bCrypt.hashSync(password, bCrypt.genSaltSync(10), null);
  99. }
  100.  
  101. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement