93 lines
2.0 KiB
JavaScript
93 lines
2.0 KiB
JavaScript
const bcrypt = require('bcryptjs')
|
|
|
|
const { getUerInfo } = require('../service/user.service')
|
|
const {
|
|
userFormateError,
|
|
userAlreadyExited,
|
|
userRegisterError,
|
|
userDoesNotExist,
|
|
userLoginError,
|
|
invalidPassword,
|
|
} = require('../constant/err.type')
|
|
|
|
const userValidator = async (ctx, next) => {
|
|
const { user_name, password } = ctx.request.body
|
|
// 合法性
|
|
if (!user_name || !password) {
|
|
console.error('用户名或密码为空', ctx.request.body)
|
|
ctx.app.emit('error', userFormateError, ctx)
|
|
return
|
|
}
|
|
|
|
await next()
|
|
}
|
|
|
|
const verifyUser = async (ctx, next) => {
|
|
const { user_name } = ctx.request.body
|
|
|
|
// if (await getUerInfo({ user_name })) {
|
|
// ctx.app.emit('error', userAlreadyExited, ctx)
|
|
// return
|
|
// }
|
|
try {
|
|
const res = await getUerInfo({ user_name })
|
|
|
|
if (res) {
|
|
console.error('用户名已经存在', { user_name })
|
|
ctx.app.emit('error', userAlreadyExited, ctx)
|
|
return
|
|
}
|
|
} catch (err) {
|
|
console.error('获取用户信息错误', err)
|
|
ctx.app.emit('error', userRegisterError, ctx)
|
|
return
|
|
}
|
|
|
|
await next()
|
|
}
|
|
|
|
const crpytPassword = async (ctx, next) => {
|
|
const { password } = ctx.request.body
|
|
|
|
const salt = bcrypt.genSaltSync(10)
|
|
// hash保存的是 密文
|
|
const hash = bcrypt.hashSync(password, salt)
|
|
|
|
ctx.request.body.password = hash
|
|
|
|
await next()
|
|
}
|
|
|
|
const verifyLogin = async (ctx, next) => {
|
|
// 1. 判断用户是否存在(不存在:报错)
|
|
const { user_name, password } = ctx.request.body
|
|
|
|
try {
|
|
const res = await getUerInfo({ user_name })
|
|
|
|
if (!res) {
|
|
console.error('用户名不存在', { user_name })
|
|
ctx.app.emit('error', userDoesNotExist, ctx)
|
|
return
|
|
}
|
|
|
|
// 2. 密码是否匹配(不匹配: 报错)
|
|
if (!bcrypt.compareSync(password, res.password)) {
|
|
ctx.app.emit('error', invalidPassword, ctx)
|
|
return
|
|
}
|
|
} catch (err) {
|
|
console.error(err)
|
|
return ctx.app.emit('error', userLoginError, ctx)
|
|
}
|
|
|
|
await next()
|
|
}
|
|
|
|
module.exports = {
|
|
userValidator,
|
|
verifyUser,
|
|
crpytPassword,
|
|
verifyLogin,
|
|
}
|