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