P30:后台管理系统开发09-实现中台路由守卫
目录
通过上篇文章我们的博客系统已经可以登录了,并且登录后,我们生成了session
,通过后台是否存在对应的session
,实现一个中台的路由守卫。如果没有登录,是不允许访问后台对应的接口,也没办法作对应的操作。这样就实现了接口的安全。
编写守卫方法
其实守卫方法是通过egg.js
中间件来实现的middleware
,所以我们需要先建立一个middleware
文件夹。在/service/app/
文件夹下面,建立一个middleware
文件夹,然后在文件夹下面建立一个adminauth.js
文件。
'use strict'; module.exports = options => { return async function adminauth(ctx, next) { console.log(ctx.session.openId); if (ctx.session.openId) { await next(); } else { ctx.body = { data: '没有登录' }; } }; };
可以看到路由守卫是一个异步的方法,如果验证session
成功,就会用await next()
向下执行。也就是说可以正常向下走流程,如果验证失败,就直接返回“没有登录。
前后台分离共享 session 的方法
在正常情况下前后台是不能共享session
的,但是只要在 egg 端的/service/config/config.default.js
里增加credentials:true
就可以了。
config.cors = { origin: 'http://localhost:3000', credentials: true, // 允许 Cook 可以跨域 allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH,OPTIONS', };
然后在后台使用axios
请求时,也带上这个参数就可以了。我们先做好中间件,等到使用时在详细讲解。
使用中间件实现路由守卫
中间件制作好了,我们可以制作在路由界面进行配置,打开/service/app/router/admin.js
文件,先声明并引入中间件。
const {router,controller} = app const adminauth = app.middleware.adminauth()
然后使用的时候,直接放在第二个参数里,就可以了。
'use strict'; module.exports = app => { const { router, controller } = app; const adminauth = app.middleware.adminauth(); router.get('/admin/index', adminauth, controller.admin.main.index); router.post('/admin/checkLogin', adminauth, controller.admin.main.checkLogin); };
本文内容就到这里,下节我们将编写添加文章的方法,然后添加文章的接口中会加入路由守卫。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
码云笔记 » P30:后台管理系统开发09-实现中台路由守卫
码云笔记 » P30:后台管理系统开发09-实现中台路由守卫