Advertisement
Guest User

Untitled

a guest
Jul 14th, 2017
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.33 KB | None | 0 0
  1. passport.use('local-signup', new LocalStrategy({
  2. usernameField: 'email',
  3. passwordField: 'password',
  4. //are there other options?
  5. //emailField did not seem to do anything
  6. passReqToCallback: true // allows us to pass in the req from our route (lets us check if a user is logged in or not)
  7. },
  8. function(req, email, password, done) {
  9. //check if email not already in database
  10. //create new user using "email" and "password"
  11. //I want an additional parameter here "name"
  12. }));
  13.  
  14. signup: function (req, res) {
  15. User
  16. .findOne({
  17. or: [{username: req.param('username')}, {email: req.param('email')}]
  18. })
  19. .then(function(user) {
  20. if (user) return {message: 'User already exists'};
  21. return User.create(req.allParams());
  22. })
  23. .then(res.ok)
  24. .catch(res.negotiate);
  25. }
  26.  
  27. var passport = require('passport');
  28. var LocalStrategy = require('passport-local').Strategy;
  29.  
  30. var LOCAL_STRATEGY_CONFIG = {
  31. usernameField: 'email',
  32. passwordField: 'password',
  33. session: false,
  34. passReqToCallback: true
  35. };
  36.  
  37. function _onLocalStrategyAuth(req, email, password, next) {
  38. User
  39. .findOne(or: [{email: email}, {username: email}])
  40. .then(function (user) {
  41. if (!user) return next(null, null, {
  42. code: 'E_USER_NOT_FOUND',
  43. message: email + ' is not found',
  44. status: 401
  45. });
  46.  
  47. if (!HashService.bcrypt.compareSync(password, user.password)) return next(null, null, {
  48. code: 'E_WRONG_PASSWORD',
  49. message: 'Password is wrong',
  50. status: 401
  51. });
  52.  
  53. return next(null, user, {});
  54. })
  55. .catch(next);
  56. }
  57.  
  58. passport.use(new LocalStrategy(LOCAL_STRATEGY_CONFIG), _onLocalStrategyAuth));
  59.  
  60. signin: function(req, res) {
  61. passport.authenticate('local', function(error, user, info) {
  62. if (error || !user) return res.negotiate(Object.assign(error, info));
  63. return res.ok(user);
  64. })(req, res);
  65. }
  66.  
  67. var passport = require('passport'),
  68. LocalStrategy = require('passport-local').Strategy;
  69.  
  70. passport.serializeUser(function(user, done) {
  71. // the values returned here will be used to deserializeUser
  72. // this can be use for further logins
  73. done(null, {username: user.username, _id: user.id, role: user.role});
  74. });
  75.  
  76. passport.deserializeUser(function(user, done) {
  77. done(null, user);
  78. });
  79.  
  80.  
  81. passport.use(new LocalStrategy(function(username, password, done){
  82. odm.User.findOne({username: username, authType: 'direct'}, function(err, user){
  83. if(err){
  84. return done(err, false);
  85. }
  86. if(!user){
  87. return done(null, false);
  88. }
  89. if(user.role === 'new'){
  90. console.log('can not use new user!');
  91. return done('user not activated yet, please contact admin', false);
  92. }
  93. user.comparePassword(password,function(err, isMatch){
  94. if(err){
  95. return done(err, false);
  96. }
  97. if(isMatch){
  98. return done(null, user);//{username: username});
  99. }
  100. return done(null, false);
  101. });
  102. });
  103. }));
  104. app.post('/login', function(req, res, next){
  105. passport.authenticate('local', {
  106. failureRedirect: '/logout?status=login failed'
  107. }, function(err, user, info){
  108. if(err){
  109. return next(err);
  110. }
  111. if(!user){
  112. return res.redirect('/login');
  113. }
  114. req.logIn(user, function(err){
  115. if (req.body.rememberme) {
  116. req.session.cookie.maxAge = 30*24*60*60*1000 ;//Rememeber 'me' for 30 days
  117. } else {
  118. req.session.cookie.expires = false;
  119. }
  120. var redirect = req.param('redirect') || '/index';
  121. res.redirect(redirect);
  122. });
  123. }
  124. )(req, res, next);
  125. }
  126. );
  127.  
  128. app.post('/register',function(req, res){
  129. var user = new odm.User({username: req.body.username, password: req.body.password, email: req.body.email, authType: 'direct'});
  130. user.save(function(err, user){
  131. if(err){
  132. console.log('registration err: ' , err);
  133. } else {
  134. res.redirect('/list');
  135. }
  136. });
  137. });
  138.  
  139. var bcrypt = require('bcrypt-nodejs');
  140.  
  141. // --------------------- User ------------------------------------------ //
  142. var userSchema = new Schema({
  143. name: String,
  144. email: String,
  145. username: {type: String, required: true, unique: true},
  146. password: String,
  147. role: {type: String, required: true, enum: ['new', 'admin', 'user'], default: 'new'},
  148. authType: {type: String, enum: ['google', 'direct'], required: true}
  149. });
  150.  
  151. userSchema.pre('save', function (next) {
  152. var user = this;
  153. if (!user.isModified('password')) return next();
  154.  
  155. console.log('making hash...........');
  156. bcrypt.genSalt(SALT_WORK_FACTOR, function (err, salt) {
  157. if (err) return next(err);
  158.  
  159. bcrypt.hash(user.password, salt, null, function (err, hash) {
  160. if (err) return next(err);
  161. user.password = hash;
  162. next();
  163. });
  164. });
  165. });
  166.  
  167. userSchema.methods.comparePassword = function (candidatePassword, cb) {
  168. bcrypt.compare(candidatePassword, this.password, function (err, isMatch) {
  169. if (err) return cb(err);
  170. cb(null, isMatch);
  171. });
  172. };
  173.  
  174. var localStrategy = require('passport-local').Strategy;
  175. var User = require('../public/models/user');
  176.  
  177. module.exports = function(passport){
  178.  
  179. passport.serializeUser(function(user, done){
  180. done(null, user.id);
  181. });
  182.  
  183. passport.deserializeUser(function(id, done){
  184. User.findById(id, function(err, user){
  185. done(err, user);
  186. });
  187. });
  188.  
  189. passport.use('local-signup', new localStrategy({
  190. usernameField: 'email',
  191. passwordField: 'password',
  192. passReqToCallback: true
  193. },
  194. function(req, email, password, done){
  195. process.nextTick(function(){
  196. User.findOne({'local.enroll': email}, function(err, user){
  197. if(err)
  198. return done(err);
  199. if(user){
  200. return done(null, false, req.flash('signupmessage', 'The email already taken'));
  201. } else{
  202. var newUser = new User();
  203. newUser.local.enroll = email;
  204. newUser.local.password = newUser.generateHash(password);
  205. newUser.save(function(err){
  206. if(err)
  207. throw err
  208. return done(null, newUser);
  209. });
  210. }
  211.  
  212. });
  213. });
  214. }));
  215.  
  216. passport.use('local-login', new localStrategy({
  217. usernameField: 'email',
  218. passwordField: 'password',
  219. passReqToCallback: true
  220. },
  221. function(req, email, password, done){
  222. process.nextTick(function(){
  223. User.findOne({'local.enroll': email}, function(err, user){
  224. if(err)
  225. return done(err);
  226. if(!user){
  227. return done(null, false, req.flash('loginmessage', 'No user found'));
  228. }
  229. if(!user.validPassword(password)){
  230. return done(null, false, req.flash('loginmessage', 'Invalid password'));
  231. }
  232. return done(null, user);
  233. });
  234. });
  235. }));
  236. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement