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-实现中台路由守卫的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » P30:后台管理系统开发09-实现中台路由守卫

微信
支付宝