登錄流程
- 客戶端提交用戶名和用戶密碼
- 服務端覈對用戶名和密碼,如果正確向客戶端發送令牌token(j選擇用jwt令牌)
token:我們可以把它理解爲一串無意義的隨機字符串;
jwt令牌: 也是一串無意義的隨機字符串,但是它可以攜帶數據(例如我們常常把用戶的uid放到令牌中);
token api添加及校驗
- 在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
- 添加校驗規則在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
}
- 在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
}