static async login(ctx, next) {
const data = ctx.request.body
const schema = Joi.object().keys({
username: Joi.string().required(),
password: Joi.string().required(),
})
let result = Joi.validate(data, schema)
// 如果有字段类型错误
if(result.error) {
return ctx.response.body = { status: 400, msg: result.error.details};
}
let { username, password } = result.value // 验证过后的数据
// 查找是否有该用户
const userInfo = await usersModel.findByName(username)
// 如果有该用户,继续验证密码是否正确
if (userInfo) {
const userInfo2 = await usersModel.findOne({ username, password })
if (userInfo2) {
ctx.response.body = {state: 200, msg: '登录成功'}
// 设置session
ctx.session.userInfo = userInfo2
} else {
ctx.response.body = {state: 410, msg: '密码错误'}
}
// 如果没有该用户,返回结果
} else {
ctx.response.body = {state: 410, msg: '该用户不存在'}
}
return ctx.response.body
}
koa-router路由中间件中验证session,这里需要注意的是next()方法前一定要使用await,不然程序不会等待next()方法执行。
export const verifyUser = async (ctx, next) => {if (ctx.session.userInfo) {
await next()
} else {
return ctx.response.body = { state: 401, msg: '无权限访问' }
}
}
koa2-cors
用于解决跨域问题
下载
npm install koa2-cors使用
app.use(cors())到此这篇关于koa2的中间件功能及应用示例的文章就介绍到这了,更多相关koa2 中间件内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!









