[レコード4] Vue + node + koa2 + mysql + nginx + redis、小規模プログラムのフルスタック開発、および管理者管理システムプロジェクト-トークン制御インターフェース権限

前のセクションでは、バックエンドがデータをトークンに暗号化する方法とユーザーデータに復号化する方法を学びましたが、ユーザーがログインせずにインターフェース(ユーザー情報を必要とするAPI)をリクエストできないことは保証されていないため、制御しないと、直接リクエストするとエラーが報告されますが、セキュリティのため、コントロールを呼び出す前にほとんどのインターフェースにログインする必要があります。ここでは、ミドルウェアを使用して制御します。

utilsフォルダーに新しいwhiteList.jsファイルを作成する

ログインなしのインターフェースルートを次に示します。これらは、クライアントからログイン状態トークンが渡されなくても正常に呼び出すことができるルートです。後でログインせずにインターフェースを呼び出す必要がある場合は、この配列の背後に複数のインターフェースルートを直接追加できます。
ここに画像の説明を挿入
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: '用户未登录'
      }
    }
  }
})

このようにして、クライアントがインターフェースを呼び出すと、このフィルタリング層を通過します。トークン検証が不要なのは、ホワイトリスト内のインターフェースのみです。そうでない場合は、redisキーと値のペアと比較する必要があります。レコードを見つけて、キーの有効期限が切れていません。実行されると、次のステップが実行されます。実行されない場合は、インターセプトされ、ステータスコード20001が直接返されます。

前:トークン検証ログインステータス
次:書き込まれます...

おすすめ

転載: blog.csdn.net/Smell_rookie/article/details/108708689