Files
stat_center/common/utils/jwt.go
T
2026-05-20 16:13:58 +08:00

85 lines
1.9 KiB
Go

package utils
import (
"errors"
"github.com/dgrijalva/jwt-go"
"github.com/gin-gonic/gin"
)
const (
AdminAccountKey = "AdminAccount"
AccountTypeKey = "AccountType"
)
//CreateToken 生成Token算法
func CreateToken(secret string, tokenClaims map[string]interface{}) (tokeness string, err error) {
if secret == "" {
return "", errors.New("secret is empty")
}
claims := jwt.MapClaims(tokenClaims)
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
tokeness, err = token.SignedString([]byte(secret))
if err != nil {
return "", err
}
return tokeness, nil
}
func keyFunc(secret string) jwt.Keyfunc {
return func(token *jwt.Token) (interface{}, error) {
return []byte(secret), nil
}
}
//ParseToken 解析Token
func ParseToken(secret string, tokeness string) (map[string]interface{}, error) {
if secret == "" || tokeness == "" {
return nil, errors.New("secret or tokeness is empty")
}
token, err := jwt.Parse(tokeness, keyFunc(secret))
if err != nil {
return nil, err
}
//验证token,如果token被修改过则为false
if !token.Valid {
return nil, errors.New("token is invalid")
}
claimsToken, ok := token.Claims.(jwt.MapClaims)
if !ok {
return nil, errors.New("cannot convert claim to MapClaim")
}
return claimsToken, nil
}
// GetAdmin 获取管理员账号
// oauth.Auth执行后有效
func GetAdmin(ctx *gin.Context) (account string, err error) {
val, exists := ctx.Get(AdminAccountKey)
if !exists {
err = errors.New("admin account not exist")
return
}
account, ok := val.(string)
if !ok {
return "", errors.New("admin account type error")
}
return
}
// GetAccountType 获取账号类型
// oauth.Auth执行后有效
func GetAccountType(ctx *gin.Context) (string, error) {
var err error
val, exists := ctx.Get(AccountTypeKey)
if !exists {
err = errors.New("claims not exist")
return "", err
}
accType, ok := val.(string)
if !ok {
return "", errors.New("claims type error")
}
return accType, nil
}