登录流程
- 客户端提交用户名和用户密码
- 服务端核对用户名和密码,如果正确向客户端发送令牌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
}