https://pkg.go.dev/github.com/golang-jwt/jwt#section-readme
基本用法
package main
import (
"fmt"
"github.com/dgrijalva/jwt-go"
"log"
"time"
)
var (
//signKey []byte
//serverPort int
)
func fatal(err error) {
if err != nil {
log.Fatal(err)
}
}
// Define some custom types were going to use within our tokens
type CustomerInfo struct {
Name string
Age int
}
const secrect = "hello"
func CreateToken(customer *CustomerInfo) (token string, err error) {
withClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
"name": customer.Name,
"age": customer.Age,
"ExpiresAt": time.Now().Add(time.Hour * 24).Unix(),
})
return withClaims.SignedString([]byte(secrect))
}
func ParseToken(token string) (customer *CustomerInfo, err error) {
customer = &CustomerInfo{}
parse, err := jwt.Parse(token, func(token *jwt.Token) (interface{}, error) {
return []byte(secrect), nil
})
if err != nil {
fmt.Println("错误", err)
}
claims := parse.Claims.(jwt.MapClaims)
if !parse.Valid {
fmt.Println("token被修改过")
}
customer.Name = claims["name"].(string)
customer.Age = int(claims["age"].(float64))
return
}
func main() {
token, err := CreateToken(&CustomerInfo{Name: "zhangsan", Age: 18})
fatal(err)
fmt.Println(token)
parseToken, err := ParseToken("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXRSJ9.eyJFeHBpcmVzQXQiOjE2NDg3MDM5NDIsImFnZSI6MTgsIm5hbWUiOiJ6aGFuZ3NhbiJ9.3co1PK7Vj_A551HEF-Vv0wwaSaDwKRlxz-kBFPk57lE")
fatal(err)
fmt.Println(parseToken)
}