Ai
2 Star 0 Fork 0

carlmax_my/console-core-go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
func_jwt.go 2.10 KB
一键复制 编辑 原始数据 按行查看 历史
carlmax_my 提交于 2025-07-09 15:31 +08:00 . fix jwt error
package jwt
import (
"errors"
"time"
"github.com/golang-jwt/jwt/v5"
"github.com/google/uuid"
"golang.org/x/sync/singleflight"
)
var (
Concurrency_Control = &singleflight.Group{}
)
func (j *jwtUtil) CreateClaims(baseClaims *BaseClaims) *CustomClaims {
bf := j.config.GetBufferTime()
ep := j.config.GetExpiresTime()
ts := time.Now()
return &CustomClaims{
BaseClaims: *baseClaims,
BufferTime: int64(bf / time.Second), // 缓冲时间, 缓冲时间内会获得新的token刷新令牌 此时一个用户会存在两个有效令牌 但是前端只留一个 另一个会丢失
RegisteredClaims: jwt.RegisteredClaims{
Audience: jwt.ClaimStrings{j.config.GetAudience()}, // 受众
NotBefore: jwt.NewNumericDate(ts.Add(-1000)), // 签名生效时间
ExpiresAt: jwt.NewNumericDate(ts.Add(ep)), // 过期时间, from配置文件
Issuer: j.config.Issuer, // 签名的发行者
IssuedAt: jwt.NewNumericDate(ts),
},
}
}
func (j *jwtUtil) CreateTokenRaw(claims *CustomClaims) (string, error) {
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
signKey := j.config.SigningKey
if signKey == "" {
return "", errors.New("jwt signing key is empty")
}
return token.SignedString([]byte(signKey))
}
// 创建一个token
func (j *jwtUtil) CreateToken(claims *CustomClaims) (string, error) {
claims.Issuer = j.config.Issuer
ep := j.config.GetExpiresTime()
if claims.ExpiresAt == nil {
expiresAt := jwt.NewNumericDate(time.Now().Add(ep))
claims.ExpiresAt = expiresAt
}
if claims.ID == "" {
claims.ID = uuid.New().String()
}
return j.CreateTokenRaw(claims)
}
// CreateTokenByOldToken 旧token 换新token 使用归并回源避免并发问题
func (j *jwtUtil) CreateTokenByOldToken(oldToken string, claims *CustomClaims) (string, error) {
v, err, _ := Concurrency_Control.Do("JWT:"+oldToken, func() (any, error) {
return j.CreateToken(claims)
})
return v.(string), err
}
// 解析 token
func (j *jwtUtil) ParseToken(jwtToken string) (claims *CustomClaims, err error) {
claims, err = ParseJwtTokenWithClaims(&jwtToken, j.config.SigningKey)
return
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/carlmax_my/console-core-go.git
git@gitee.com:carlmax_my/console-core-go.git
carlmax_my
console-core-go
console-core-go
v0.1.108

搜索帮助