3 Star 0 Fork 0

Ander / tools

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
token_info.go 2.04 KB
一键复制 编辑 原始数据 按行查看 历史
package helper
import (
"errors"
"github.com/golang-jwt/jwt/v4"
"time"
)
var (
TokenExpired = errors.New("token is expired")
TokenNotValidYet = errors.New("token not active yet")
TokenMalformed = errors.New("that's not even a token")
TokenInvalid = errors.New("couldn't handle this token")
SignKey = "niChatTest"
)
type CustomClaims struct {
UserId string `json:"user_id"`
NetId string `json:"net_id"`
TimeStamp int64 `json:"time_stamp"`
jwt.StandardClaims
}
type JWTInfo struct {
SignKey []byte
}
func NewJWT() *JWTInfo {
return &JWTInfo{[]byte(SignKey)}
}
// TokenCreate 创建token
func (j *JWTInfo) TokenCreate(tokenInfo CustomClaims) (string, error) {
t := jwt.NewWithClaims(jwt.SigningMethodHS256, tokenInfo)
return t.SignedString(j.SignKey)
}
// TokenParse 解析token
func (j *JWTInfo) TokenParse(token string) (*CustomClaims, error) {
t, err := jwt.ParseWithClaims(token, &CustomClaims{}, func(token *jwt.Token) (i interface{}, err error) {
return j.SignKey, nil
})
if err != nil {
var ve jwt.ValidationError
if errors.As(err, &ve) {
if ve.Errors&jwt.ValidationErrorMalformed != 0 {
return nil, TokenMalformed
} else if ve.Errors&jwt.ValidationErrorExpired != 0 {
return nil, TokenExpired
} else if ve.Errors&jwt.ValidationErrorNotValidYet != 0 {
return nil, TokenNotValidYet
} else {
return nil, TokenInvalid
}
}
}
if claims, ok := t.Claims.(*CustomClaims); ok && t.Valid {
return claims, nil
}
return nil, TokenInvalid
}
// RefreshToken 更新token
func (j *JWTInfo) RefreshToken(tokenString string) (string, error) {
jwt.TimeFunc = func() time.Time {
return time.Now()
}
token, err := jwt.ParseWithClaims(tokenString, &CustomClaims{}, func(token *jwt.Token) (interface{}, error) {
return j.SignKey, nil
})
if err != nil {
return "", err
}
if claims, ok := token.Claims.(*CustomClaims); ok && token.Valid {
jwt.TimeFunc = time.Now
claims.StandardClaims.ExpiresAt = time.Now().Add(1 * time.Hour).Unix()
return j.TokenCreate(*claims)
}
return "", TokenInvalid
}
Go
1
https://gitee.com/ander888/tools.git
git@gitee.com:ander888/tools.git
ander888
tools
tools
v1.0.5

搜索帮助

53164aa7 5694891 3bd8fe86 5694891