根据不同的登录方式对账户密码做不同的处理

  1. 在token.js中添加对应的处理方法
    根据登录方式的不同对登录数据进行处理
const Router = require('koa-router')
const {ValidationToken} = require('../../validators/validator')
const {LoginType} = require('../../lib/enum')
const {User} = require('../../models/user')
const {ParameterException} = require('../../../core/http-exception')
const router = new Router({
  prefix: '/v1/token'
})

router.post('/', async (ctx)=>{
  const v = await new ValidationToken().validate(ctx)

  // 根据不同的登录方式,返回客户端不同的信息
  switch (v.get('body.type')) {
    case LoginType.USER_EMAIL:
      await emailLogin(v.get('body.account'), v.get('body.secret'))
      break;
    case LoginType.USER_MINI_PROGRAM:

      break;
    default:
      throw new ParameterException('没有相关处理函数')
      break;
  }
})

// 比对客户端传递的用户名和密码是否与数据库中的一致,如果一致就颁布令牌
async function emailLogin(account, secret){
  const user = await User.verifyEmailPassword(account, secret)
}

module.exports = router
  1. 将数据处理方法编写在user.js模型中
const {AuthFailed} = require('../../core/http-exception')

class User extends Model{
  static async verifyEmailPassword(email, plainPassword){
    // 查询数据中是否存在对应的传入的用户
    const user = await User.findOne({
      where: {
        email: email
      }
    })
    // 当用户不存在
    if(!user){
      throw new AuthFailed('账号不存在')
    }

    // 注意数据表中的密码是加密过后的,不能直接拿来与用户传入的密码进行对比
    const correct = bcrypt.compareSync(plainPassword, user.password)
    // 如果密码不一致
    if(!correct){
      throw new AuthFailed('密码不正确')
    }
    return user
  }
}
  1. 异常处理文件http-exception.js中添加错误处理类
// 当查询结果在数据库中找不到
class NotFound extends HttpException{
  constructor(msg="资源未找到", errorCode="10000"){
    super()
    this.code = 404
    this.msg = msg
    this.errorCode = errorCode
  }
}

// 当查询结果在数据库中找不到
class AuthFailed extends HttpException{
  constructor(msg="授权失败", errorCode="10004"){
    super()
    this.code = 401
    this.msg = msg
    this.errorCode = errorCode
  }
}

module.exports = { 
  HttpException,
  ParameterException,
  Success,
  NotFound,
  AuthFailed
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章