我们知道,http协议是无状态的,当用户进行登录后,并不会保存账户密码,如果我们需要维持用户的登录状态,就需要使用一些方法。目前主流的用户认证方法有基于token和基于session两种方式。
基于token的认证可以使用koa-jwt中间件,基于session的认证则使用标题的koa-session。
下载
npm i koa-session
使用
app.js 入口文件中注册session
const CONFIG = { key: 'koa:sess', /\*\* (string) cookie key (default is koa:sess) \*/ /\*\* (number || 'session') maxAge in ms (default is 1 days) \*/ // 状态保存最大时间,默认为一天 maxAge: 86400000, autoCommit: true, /\*\* (boolean) 自动保存头部 (default true) \*/ overwrite: true, /\*\* (boolean) 能否覆盖 (default true) \*/ httpOnly: true, /\*\* (boolean) httpOnly or not (default true) \*/ signed: true, /\*\* (boolean) signed or not (default true) \*/ /\*\* (boolean) 强制在每个响应上设置会话标识符cookie。过期将重置为原始maxAge,重新设置过期倒计时。 (default is false) \*/ rolling: false, /\*\* (boolean) 当会话快过期时续订会话,这样我们可以始终保持用户登录。(default is false)\*/ renew: false, }; // 如果你所有都为默认配置,则不需要传递配置参数,app.use(session(app))即可 app.use(session(sessionConfig, app));
session的使用
注册后可以通过上下文ctx找到session属性,下面代码将用户信息存入session属性中,并创建key和value
user.js
// 用户登录 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 中间件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章: