Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const bcrypt = require('bcrypt');
- const jwt = require('jsonwebtoken');
- const PATHS = global.PATHS;
- const Models = require(PATHS.models);
- const Mongo = Models.db('mongo');
- const User = Mongo.model('User');
- const methods = {
- /**
- * @param creds: Obj:
- * (OR1) email: email address
- * (OR1) phone: phone#
- * password: log in passphrase
- * @param callback: fn(error[, {token, userId}])
- */
- authenticate(creds, callback) {
- if (!callback) {
- throw new Error('This method requires a callback.');
- };
- const { email, phone, password } = creds;
- User.findOne({
- $or: [{
- 'phone.number': phone || 'some invalid phone number',
- }, {
- 'email.address': email || 'some invalid email',
- }],
- }).then((user) => {
- if (!user) {
- return callback(new Error('User not found'));
- };
- // check if password matches
- bcrypt.compare(password, user.password, function(err, result) {
- if (err || !result) {
- callback(new Error('Wrong password.'));
- } else {
- const payload = { userId: user._id };
- const token = jwt.sign(payload, global.CONFIG.jwtSecret, {
- expiresIn: '2d', // expires in 2 days
- });
- callback(null, {
- token,
- userId: user._id,
- });
- };
- });
- }).catch((err) => callback(new Error('Internal error finding user')));
- },
- };
- module.exports = methods;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement