package main
import ( "fmt" "time"
"github.com/dgrijalva/jwt-go" )
type Claims struct { ID int64 `json:"id,omitempty"` LoginName string `json:"name,omitempty"` jwt.StandardClaims }
var jwtSecret string = "golang-test"
func main() { exp := time.Now().Add(time.Duration(1) * time.Hour) user := Claims{ ID: 1, LoginName: "golang", StandardClaims: jwt.StandardClaims{ ExpiresAt: exp.Unix(), }, }
token, err := Encode(user) if err != nil { fmt.Println(err) return } fmt.Println(token)
claims, err := Decode(token) if err != nil { fmt.Println(err) return } fmt.Println(claims) }
func Encode(claims Claims) (string, error) { tokenHandler := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) return tokenHandler.SignedString([]byte(jwtSecret)) }
func Decode(token string) (Claims, error) { claims := Claims{}
_, err := jwt.ParseWithClaims(token, &claims, func(t *jwt.Token) (interface{}, error) { if _, ok := t.Method.(*jwt.SigningMethodHMAC); !ok { return nil, fmt.Errorf("unexpected signing method: %v", t.Header["alg"]) } return []byte(jwtSecret), nil })
return claims, err }
|