用戶登錄返回客戶端token

登錄流程
  1. 客戶端提交用戶名和用戶密碼
  2. 服務端覈對用戶名和密碼,如果正確向客戶端發送令牌token(j選擇用jwt令牌)
    token:我們可以把它理解爲一串無意義的隨機字符串;
    jwt令牌: 也是一串無意義的隨機字符串,但是它可以攜帶數據(例如我們常常把用戶的uid放到令牌中);
token api添加及校驗
  1. 在app/api/v1文件夾下創建token.js
const Router = require('koa-router')
const {ValidationToken} = require('../../validators/validator')
const router = new Router({
  prefix: '/v1/token'
})

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

module.exports = router
  1. 添加校驗規則在validator.js文件中
const {LoginType} = require('../lib/enum')

// token校驗
class ValidationToken extends LinValidator{
  constructor() {
    super()
    // 賬號
    this.account = [
      new Rule('isLength', '不符合賬號規則', {min:4, max: 32})
    ]
    // 密碼 可有可沒有,傳統登錄必須有,小程序不需要
    this.secret = [
      new Rule('isOptional', '不符合賬號規則', {min:4, max: 32}),
      new Rule('isLength', '至少6個字符', {min:6, max:128})
    ]
  }
  // 判斷當前用戶登錄的方式
  validateLoginType(vals){
    if(!vals.body.type){
      throw new Error('type是必須參數')
    }
    if(!LoginType.isThisType(vals.body.type)){
      throw new Error('type參數不合法')
    }
  }
}

module.exports = { 
  ValidationInteger,
  RegisterValidator,
  ValidationToken
}
  1. 在lib文件夾下創建enum.js文件,枚舉登錄類型,供校驗時做判斷
function isThisType(val){
  for(let key in this){
    if(this[key] == val){
      return true
    }
  }
  return false
}

const LoginType = {
  USER_MINI_PROGRAM: 100,
  USER_EMAIL: 101,
  USER_MOBILE: 102,
  ADMIN_EMAIL: 200,
  isThisType
}

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