github.com/iris-contrib/middleware/jwt 应用成功,可以正常签发 token 和验证 token;但可以反复重复的登录签发新的 token,在过期时间内所有的 token 都可以正常通过验证,不符合项目的需求;
- 项目需求:第二次登录后,前一次的 token 将无法失效;
- 功能实现:- 用户登录签发 token 是,将 token 和 user_id 保存到 redis,注:覆盖保存,一个 user_id 只有一个 token;
- 每次访问验证 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
    
  