All files / koa/auth/local passport.js

69.23% Statements 18/26
75% Branches 9/12
100% Functions 2/2
69.23% Lines 18/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    5x 5x 5x   5x 5x         15x 15x 15x 1x 1x   14x 5x 5x   9x   1x 1x               8x       8x                
'use strict'
 
const passport = require('koa-passport')
const LocalStrategy = require('passport-local').Strategy
const logger = require('../../util/logger').tag('passport')
 
exports.setup = function (User, config) {
  passport.use(new LocalStrategy({
    usernameField: 'email',
    passwordField: 'password', // this is the virtual field on the model
  },
  async(email, password, done) => {
    try {
      const user = await User.findOne({ email: email.toLowerCase() })
      if (!user) {
        logger.error('用户名错误', { email })
        return done(null, false, { msg: '用户名错误!' })
      }
      if (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) {
      logger.debug('LocalStrategy error')
      return done(err)
    }
  }
  ))
}