Advertisement
Guest User

Untitled

a guest
Jan 30th, 2019
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const bcrypt = require('bcrypt');
  2. const jwt = require('jsonwebtoken');
  3.  
  4. const PATHS = global.PATHS;
  5.  
  6. const Models = require(PATHS.models);
  7.  
  8. const Mongo = Models.db('mongo');
  9. const User = Mongo.model('User');
  10.  
  11. const methods = {
  12.     /**
  13.      * @param creds: Obj:
  14.      *      (OR1) email: email address
  15.      *      (OR1) phone: phone#
  16.      *      password: log in passphrase
  17.      * @param callback: fn(error[, {token, userId}])
  18.      */
  19.     authenticate(creds, callback) {
  20.         if (!callback) {
  21.             throw new Error('This method requires a callback.');
  22.         };
  23.         const { email, phone, password } = creds;
  24.         User.findOne({
  25.             $or: [{
  26.                 'phone.number': phone || 'some invalid phone number',
  27.             }, {
  28.                 'email.address': email || 'some invalid email',
  29.             }],
  30.         }).then((user) => {
  31.             if (!user) {
  32.                 return callback(new Error('User not found'));
  33.             };
  34.  
  35.             // check if password matches
  36.             bcrypt.compare(password, user.password, function(err, result) {
  37.                 if (err || !result) {
  38.                     callback(new Error('Wrong password.'));
  39.                 } else {
  40.                     const payload = { userId: user._id };
  41.                     const token = jwt.sign(payload, global.CONFIG.jwtSecret, {
  42.                         expiresIn: '2d', // expires in 2 days
  43.                     });
  44.                     callback(null, {
  45.                         token,
  46.                         userId: user._id,
  47.                     });
  48.                 };
  49.             });
  50.         }).catch((err) => callback(new Error('Internal error finding user')));
  51.     },
  52. };
  53.  
  54.  
  55. module.exports = methods;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement