如果我们需要自己定义一个中间件来实现接口的拦截,只有登录了的用户才能访问接口,否则就返回401;
中间件的作用
个人理解就是每当访问接口的时候,都会经过中间件里面的代码
koa定义中间件格式
import UserModel from '../dbs/modules/users' module.exports = () => { return async function (ctx, next) { const allowpage = ['/login', '/register'] let session_id = ctx.cookies.get('SESSION_ID') if (allowpage.indexOf(ctx.url) > -1) { console.log(1) await next() return } else if (ctx.url.indexOf('/_nuxt') > -1) { await next() return } else if (session_id !== undefined) { let userInfo = await UserModel.findById(session_id); console.log(userInfo) if (userInfo) { ctx.userinfo = userInfo; await next(); return } else { ctx.status = 401 ctx.body = { code: -1, msg: '请先登陆' } } } else { console.log(3) ctx.status = 401 ctx.body = { code: -1, msg: '请先登陆' } } } }
必须返回的是一个函数,接收两个参数ctx,next,必须next,才能执行其他的中间件
以上代码的意思是只有在allowpage中定义的接口和和ctx.url包括了nuxt(nuxt的静态路径)和得到了用户的SESSION_ID才能执行next,也就是往下执行其他中间件,否则就返回401,告诉用户必须登录才可以
如果cookie中包含了用户的session_id表示用户已经登陆,根据session_id查找用户的信息,然后存到ctx里面
app.js引用中间件
const test = require('./utils/auth'); app.use(test())
发表评论
侧栏公告
寄语
譬如朝露博客是一个分享前端知识的网站,联系方式11523518。
热评文章
标签列表
热门文章
友情链接