package jwt import ( "errors" "github.com/exhibition-main/internal/msg" "time" "github.com/spf13/viper" "github.com/dgrijalva/jwt-go" ) var mySecret = []byte(viper.GetString("jwt.key")) type MyClaims struct { UserId int64 `json:"userId"` Nickname string `json:"nickname"` Phone string `json:"phone"` Openid string `json:"openid"` jwt.StandardClaims } // GenToken 生成JWT func GenToken(userId int64, nickname string, phone string, openid string) (string, error) { // 创建一个我们自己的声明的数据 c := MyClaims{ userId, nickname, phone, openid, jwt.StandardClaims{ ExpiresAt: time.Now().Add( time.Duration(viper.GetInt("jwt.expire")) * time.Hour).Unix(), Issuer: "meal", }, } token := jwt.NewWithClaims(jwt.SigningMethodHS256, c) return token.SignedString(mySecret) } // ParseToken 解析JWT func ParseToken(tokenString string) (*MyClaims, error) { // 解析token var mc = new(MyClaims) token, err := jwt.ParseWithClaims(tokenString, mc, func(token *jwt.Token) (i interface{}, err error) { return mySecret, nil }) if err != nil { return nil, err } if token.Valid { // 校验token return mc, nil } return nil, errors.New(msg.INVALID_TOKEN) }