https://pkg.go.dev/github.com/golang-jwt/jwt#section-readme
    基本用法

    1. package main
    2. import (
    3. "fmt"
    4. "github.com/dgrijalva/jwt-go"
    5. "log"
    6. "time"
    7. )
    8. var (
    9. //signKey []byte
    10. //serverPort int
    11. )
    12. func fatal(err error) {
    13. if err != nil {
    14. log.Fatal(err)
    15. }
    16. }
    17. // Define some custom types were going to use within our tokens
    18. type CustomerInfo struct {
    19. Name string
    20. Age int
    21. }
    22. const secrect = "hello"
    23. func CreateToken(customer *CustomerInfo) (token string, err error) {
    24. withClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
    25. "name": customer.Name,
    26. "age": customer.Age,
    27. "ExpiresAt": time.Now().Add(time.Hour * 24).Unix(),
    28. })
    29. return withClaims.SignedString([]byte(secrect))
    30. }
    31. func ParseToken(token string) (customer *CustomerInfo, err error) {
    32. customer = &CustomerInfo{}
    33. parse, err := jwt.Parse(token, func(token *jwt.Token) (interface{}, error) {
    34. return []byte(secrect), nil
    35. })
    36. if err != nil {
    37. fmt.Println("错误", err)
    38. }
    39. claims := parse.Claims.(jwt.MapClaims)
    40. if !parse.Valid {
    41. fmt.Println("token被修改过")
    42. }
    43. customer.Name = claims["name"].(string)
    44. customer.Age = int(claims["age"].(float64))
    45. return
    46. }
    47. func main() {
    48. token, err := CreateToken(&CustomerInfo{Name: "zhangsan", Age: 18})
    49. fatal(err)
    50. fmt.Println(token)
    51. parseToken, err := ParseToken("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXRSJ9.eyJFeHBpcmVzQXQiOjE2NDg3MDM5NDIsImFnZSI6MTgsIm5hbWUiOiJ6aGFuZ3NhbiJ9.3co1PK7Vj_A551HEF-Vv0wwaSaDwKRlxz-kBFPk57lE")
    52. fatal(err)
    53. fmt.Println(parseToken)
    54. }