123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package utils
- import (
- "errors"
- "github.com/golang-jwt/jwt/v4"
- "project_management/app/e"
- "project_management/global"
- "time"
- )
- type MyClaims struct {
- UserId uint `json:"user_id"`
- UserName string `json:"user_name"`
- Role string `json:"role"`
- jwt.RegisteredClaims
- }
- const TokenExpireDuration = time.Hour * 999999
- func CreateToken(userId uint, userName, role string) (string, error) {
- claims := MyClaims{
- UserId: userId,
- UserName: userName,
- Role: role,
- RegisteredClaims: jwt.RegisteredClaims{
- ExpiresAt: jwt.NewNumericDate(time.Now().Add(TokenExpireDuration)),
- Issuer: global.JwtSetting.Issuer,
- },
- }
- var mySerect = []byte(global.JwtSetting.Secret)
- token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
- return token.SignedString(mySerect)
- }
- func ParseToken(tokenStr string) (*MyClaims, e.Rescode) {
- // 使用全局配置中的密钥对token进行解析。
- var mySecret = []byte(global.JwtSetting.Secret)
- // 尝试解析并验证JWT令牌。
- claims := new(MyClaims)
- token, err := jwt.ParseWithClaims(tokenStr, claims, func(token *jwt.Token) (interface{}, error) {
- return mySecret, nil
- })
- if err != nil {
- if errors.Is(err, jwt.ErrSignatureInvalid) || errors.Is(err, jwt.ErrInvalidKey) {
- return nil, e.TokenIsInvalid
- } else if ve, ok := err.(*jwt.ValidationError); ok && ve.Errors&jwt.ValidationErrorExpired != 0 {
- return nil, e.TokenIsExpired
- }
- return nil, e.TokenIsInvalid
- }
- // 验证令牌是否有效。
- if !token.Valid {
- return nil, e.TokenIsInvalid
- }
- // 如果令牌有效,则返回解析出的声明信息。
- return claims, e.SUCCESS
- }
|