P30:后台管理系统开发09-实现中台路由守卫

目录
文章目录隐藏
  1. 编写守卫方法
  2. 前后台分离共享 session 的方法
  3. 使用中间件实现路由守卫

通过上篇文章我们的博客系统已经可以登录了,并且登录后,我们生成了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);
};

本文内容就到这里,下节我们将编写添加文章的方法,然后添加文章的接口中会加入路由守卫。

「点点赞赏,手留余香」

0

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
码云笔记 » P30:后台管理系统开发09-实现中台路由守卫

发表回复