- 在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
- 将数据处理方法编写在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
}
}
- 异常处理文件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
}