[记录四]Vue+node+koa2+mysql+nginx+redis,全栈开发小程序和管理员管理系统项目——token控制接口权限

   日期:2020-09-28     浏览:95    评论:0    
核心提示:上节我们已了解后端是如何将数据加密成token以及如何解密回用户数据的,但是并没有做到用户没有登录就不可以请求某个接口(需要用户信息的api),这样不控制的话就直接请求那就会报错了,当然为了安全是肯定要对大部分接口进行登录后才能调用的控制的。这里我采用中间件去控制。在utils文件夹下新建一个whiteList.js文件这里就写免登录的接口路由,这些是客户端不传登录态token也是可以调用成功了,后面需要不登录就能调用接口就直接在这个数组后面加多个接口的路由。在app.js中编写一个中间件,根据上面

上节我们已了解后端是如何将数据加密成token以及如何解密回用户数据的,但是并没有做到用户没有登录就不可以请求某个接口(需要用户信息的api),这样不控制的话就直接请求那就会报错了,当然为了安全是肯定要对大部分接口进行登录后才能调用的控制的。这里我采用中间件去控制。

在utils文件夹下新建一个whiteList.js文件

这里就写免登录的接口路由,这些是客户端不传登录态token也是可以调用成功了,后面需要不登录就能调用接口就直接在这个数组后面加多个接口的路由。

在app.js中编写一个中间件,根据上面的白名单进行接口控制。

const redisClient = require('./redis/redis')
const whiteList = require('./util/whiteList')
//app.js
//接口是否需要登录
app.use(async (ctx, next) => { 
  let url = ctx.request.url
  let flag = false
  whiteList.map(res => {  
    if (url.indexOf(res) !== -1) {  
      flag = true
    }
  })
  if (flag) { 
    await next()
  } else {  
    if (ctx.header && ctx.header.token) { 
      const token = ctx.header.token
      if (token) { 
        try { 
          let exits = await redisClient.exists(token)
          if (exits) { //redis存在此token
            await next()
          } else { 
            return ctx.body = { 
              code: 20001,
              status: 200,
              message: 'token失效,请重新登录'
            }
          }
        } catch (error) { 
          console.log('我是错误信息')
          console.log(error)
          console.log('我是错误信息')
        }
      } else { //没有传token
        return ctx.body = { 
          code: 20001,
          status: 200,
          message: '用户未登录'
        }
      }
    } else { 
      return ctx.body = { 
        code: 20001,
        status: 200,
        message: '用户未登录'
      }
    }
  }
})

这样客户端调用接口的时候都会经过这一层的筛选,只有在白名单内的接口才不需要token的校验,不在的话需要跟redis的键值对去对比,找到记录并key未过期代表可以执行,就会执行下一步,否则都将拦截下来直接返回20001的状态码。

上一篇:token校验登录态
下一篇:使用swagger自动生成接口文档

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服