All files / exp/auth/local passport.js

53.85% Statements 14/26
58.33% Branches 7/12
80% Functions 4/5
53.85% Lines 14/26

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53    3x 3x 3x     4x       4x 1x 1x   3x       3x                     3x       3x                     3x 3x       4x    
'use strict'
 
const passport = require('passport')
const LocalStrategy = require('passport-local').Strategy
const logger = require('../../util/logger').tag('passport')
 
function localAuthenticate(User, config, email, password, done) {
  User.findOne({
    email: email.toLowerCase(),
  }).exec()
    .then(user => {
      if (!user) {
        logger.error('用户名错误', { email })
        return done(null, false, { msg: '用户名错误!' })
      }
      Iif (user.role === 'user' || (!config.userRoles.includes(user.role))) {
        logger.error('用户待激活角色', { email })
        return done(null, false, { msg: '用户待激活角色!' })
      }
      switch (user.status) {
        case 0:
          logger.error('用户待激活状态', { email })
          return done(null, false, { msg: '用户待激活状态!' })
        case 2:
          logger.error('用户被停用', { email })
          return done(null, false, { msg: '用户被停用!' })
        case 3:
          logger.error('用户被删除', { email })
          return done(null, false, { msg: '用户被删除!' })
        default:
          Iif (!user.authenticate(password)) {
            logger.error('密码错误', { email })
            return done(null, false, { msg: '密码错误!' })
          }
          return done(null, user)
      }
    })
    // .catch(err => done(err))
    .catch(err => {
      logger.debug('LocalStrategy error')
      done(err)
    })
}
 
// export function setup(User) {
exports.setup = function (User, config) {
  passport.use(new LocalStrategy({
    usernameField: 'email',
    passwordField: 'password',
  }, function (email, password, done) {
    return localAuthenticate(User, config, email, password, done);
  }));
}