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);
};

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

1. 本站所有免费资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!
2. 本站不保证所提供下载的免费资源的准确性、安全性和完整性,免费资源仅供下载学习之用!如有链接无法下载、失效,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或技术教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
5. 加入前端开发QQ群:565733884,我们大家一起来交流技术!
码云笔记 » P30:后台管理系统开发09-实现中台路由守卫

发表评论

提供最优质的资源集合

立即查看 了解详情