Guest User

Untitled

a guest
Nov 3rd, 2018
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.39 KB | None | 0 0
  1. const mongoose = require('mongoose');
  2.  
  3. mongoose.Promise = global.Promise;
  4. mongoose.connect('mongodb://localhost:27017/MyApp', { useNewUrlParser: true })
  5.  
  6.  
  7. module.exports = {
  8. mongoose
  9. }
  10.  
  11. const {mongoose} = require('./../db/mongoose');
  12. const validator = require('validator');
  13. const jwt = require('jsonwebtoken');
  14. const _ = require('lodash');
  15. const bcrypt = require('bcryptjs');
  16.  
  17. var UserSchema = new mongoose.Schema({
  18. email:{
  19. type:String,
  20. required:true,
  21. trim:true,
  22. minlength:1,
  23. unique:true,
  24. validator:{
  25. validate: validator.isEmail,
  26. message:'Email is not valid'
  27. }
  28. },
  29. password:{
  30. type:String,
  31. required:true,
  32. minlength:6
  33. },
  34. firstname:{
  35. type:String,
  36. required:true,
  37. trim:true
  38. },
  39. lastname:{
  40. type:String,
  41. required:true,
  42. trim:true
  43. },
  44. dob:{
  45. type:Date,
  46. required:true
  47. },
  48. tokens:{
  49. access:{
  50. type:String,
  51. required:true
  52. },
  53. token:{
  54. type:String,
  55. required:true
  56. }
  57. }
  58. });
  59.  
  60. UserSchema.methods.toJSON = function () {
  61. var user = this;
  62. var userObject = user.toObject();
  63.  
  64. return _.pick(userObject, ['_id','email']);
  65.  
  66. };
  67.  
  68. UserSchema.methods.generateAuthToken = function () {
  69. var user = this;
  70. var access = 'auth';
  71. var token = jwt.sign({_id:user._id.toHexString(), access}, 'abc123').toString();
  72.  
  73. user.tokens = user.tokens.concat([{access,token}])
  74.  
  75. return user.save().then(()=>{
  76. return token;
  77. })
  78.  
  79. };
  80.  
  81. UserSchema.methods.removeToken = function(token) {
  82. var user = this;
  83.  
  84. return user.update({
  85. $pull:{
  86. tokens:{token}
  87. }
  88. })
  89. }
  90.  
  91. UserSchema.statics.findByToken = function (token) {
  92. var User = this;
  93. var decoded;
  94.  
  95. try{
  96. decoded = jwt.verify(token, 'abc123');
  97. }catch(e){
  98. return Promise.reject();
  99.  
  100. }
  101.  
  102. return User.findOne({
  103. '_id': decoded._id,
  104. 'tokens.token':token,
  105. 'tokens.access':'auth'
  106. });
  107. };
  108.  
  109.  
  110. UserSchema.static.findByCredentials = function (email, password) {
  111. var User = this;
  112.  
  113. return User.findOne({email}).then((user)=>{
  114. if(!user){
  115. return Promise.reject();
  116. }
  117. return new Promise((resolve, reject)=>{
  118.  
  119. bcrypt.compare(password,user.password,(err,res)=>{
  120. if(res)
  121. resolve(user);
  122. else
  123. reject();
  124. });
  125.  
  126. });
  127. });
  128. };
  129.  
  130. UserSchema.pre('save', function(next){
  131. var user = this;
  132.  
  133. if(user.isModified('password')){
  134. bcrypt.genSalt(10,(err, salt)=>{
  135. bcrypt.hash (user.password, salt, (err, hash)=>{
  136. user.password = hash;
  137. next();
  138. });
  139. });
  140. }else{
  141. next();
  142. }
  143. });
  144.  
  145. var User = mongoose.model('User',UserSchema);
  146.  
  147. module.exports = {
  148. User
  149. }
  150.  
  151. const express = require('express');
  152. const app = express();
  153. const hbs = require('hbs')
  154. const _ = require('lodash')
  155.  
  156. var {User} = require('./models/user');
  157. var {mongoose} = require('./db/mongoose')
  158. var {authenticate} = require('./middleware/authenticate')
  159.  
  160. app.set('view engine', 'hbs');
  161.  
  162. hbs.registerPartials(__dirname + '/views/partials')
  163.  
  164. app.use(express.json());
  165. app.use(express.urlencoded({extended:true}));
  166.  
  167. app.post('/signup',(req,res)=>{
  168. var body = _.pick(req.body,['email','password','firstname','lastname','dob']);
  169.  
  170. var user = new User(body);
  171. user.save().then(()=>{
  172. return user.generateAuthToken();
  173. }).then((token)=>{
  174.  
  175. res.header('x-auth',token).send(user);
  176. }).catch((e)=>{
  177. res.status(400).send(e)
  178. })
  179. })
  180. app.listen(3232, ()=>{
  181. console.log('Server started at PORT 3232');
  182. })
Add Comment
Please, Sign In to add comment