github.com/iris-contrib/middleware/jwt 应用成功,可以正常签发 token 和验证 token;但可以反复重复的登录签发新的 token,在过期时间内所有的 token 都可以正常通过验证,不符合项目的需求;

  • 项目需求:第二次登录后,前一次的 token 将无法失效;
  • 功能实现:
    1. 用户登录签发 token 是,将 token 和 user_id 保存到 redis,注:覆盖保存,一个 user_id 只有一个 token;
    2. 每次访问验证 jwt 时候,先去 redis 里面对比存储的 token,与携带的 token 是否一致;如果一致则继续,如果不一致提示登录过期,您的账号在其他地方已登录;
  • 问题: 如何在 CheckJWT 之前加入对比 redis 里面的 token 的代码?go 里面没有重载,我想自己实现 (middleware.JwtHandler().Serve)的方法,但是对 golang 理解不够,无从下手,求高手指点;
// middleware/jwt.go

package middleware

import (
    "github.com/iris-contrib/middleware/jwt"
)

const JwtSignString = "liLHidCSos2osjOb"

/**
 * 验证 jwt
 * @method JwtHandler
 */
func JwtHandler() *jwt.Middleware {
    var mySecret = []byte("liLHidCSos2osjOb")
    return jwt.New(jwt.Config{
        ValidationKeyGetter: func(token *jwt.Token) (interface{}, error) {
            return mySecret, nil
        },
        SigningMethod: jwt.SigningMethodHS256,
    })
}

// router.go
...
usersParty.Use(middleware.JwtHandler().Serve, casbinMiddleware.ServeHTTP) 
...
iris golang