Files
taotie-api/utils/sjwt/sjwt.go

51 lines
1.2 KiB
Go

package sjwt
import (
"time"
"github.com/golang-jwt/jwt/v5"
)
type MyClaims struct {
jwt.RegisteredClaims
TenantId string `json:"tenantId"`
UserId string `json:"userId"`
UserName string `json:"userName"`
}
// 生成 token
func GenerateToken(tenantId string, userId string, userName string, timeOut int, signedString string) (string, error) {
// 创建一个claims
claims := jwt.NewWithClaims(jwt.SigningMethodHS256, MyClaims{
RegisteredClaims: jwt.RegisteredClaims{
IssuedAt: jwt.NewNumericDate(time.Now()),
ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Second * time.Duration(timeOut))),
Issuer: "taotie",
},
TenantId: tenantId,
UserId: userId,
UserName: userName,
})
// 生成 token
return claims.SignedString([]byte(signedString))
}
// 解析 token
func ParseToken(tokenString string, signedString string) (*MyClaims, error) {
// 解析token
token, err := jwt.ParseWithClaims(tokenString, &MyClaims{}, func(token *jwt.Token) (any, error) {
return []byte(signedString), nil
})
if err != nil {
return nil, err
}
// 对token进行断言
if claims, ok := token.Claims.(*MyClaims); ok {
return claims, nil
} else {
return nil, err
}
}