8 Star 9 Fork 4

gpress / gpress

Create your Gitee Account
Explore and code with more than 8 million developers,Free private repositories !:)
Sign up
Clone or Download
utilJWT.go 1.81 KB
Copy Edit Web IDE Raw Blame History
springrain authored 2023-03-04 21:03 . gofumpt格式化代码
package main
import (
"errors"
"fmt"
"time"
"github.com/golang-jwt/jwt/v4"
)
// newJWTToken 创建一个jwtToken
func newJWTToken(userId string, info map[string]interface{}) (string, error) {
if userId == "" {
return "", errors.New("userId不能为空")
}
mapClaims := jwt.MapClaims{}
for k, v := range info {
mapClaims[k] = v
}
mapClaims["exp"] = jwt.NewNumericDate(time.Now().Add(time.Duration(config.Timeout) * time.Second))
mapClaims["iat"] = jwt.NewNumericDate(time.Now())
mapClaims["nbf"] = jwt.NewNumericDate(time.Now())
mapClaims["iss"] = defaultName
mapClaims["jti"] = userId
mapClaims[tokenUserId] = userId
token := jwt.NewWithClaims(jwt.SigningMethodHS512, mapClaims)
tokenString, err := token.SignedString([]byte(config.JwtSecret))
return tokenString, err
}
func userIdByToken(tokenString string) (string, error) {
if tokenString == "" {
return "", errors.New("token不能为空")
}
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
// Don't forget to validate the alg is what you expect:
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
}
return []byte(config.JwtSecret), nil
})
if !token.Valid {
return "", errors.New("token is not valid")
} else if errors.Is(err, jwt.ErrTokenMalformed) {
return "", fmt.Errorf("that's not even a token:%w", err)
} else if errors.Is(err, jwt.ErrTokenExpired) || errors.Is(err, jwt.ErrTokenNotValidYet) {
return "", fmt.Errorf("timing is everything:%w", err)
} else if err != nil {
return "", fmt.Errorf("couldn't handle this token:%w", err)
}
mapClaims, ok := token.Claims.(jwt.MapClaims)
if ok && token.Valid {
userId := mapClaims[tokenUserId].(string)
return userId, nil
}
return "", errors.New("token错误或过期")
}
Go
1
https://gitee.com/gpress/gpress.git
git@gitee.com:gpress/gpress.git
gpress
gpress
gpress
master

Search