1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| var secret = "SYMC" var ExpireTime = time.Hour * 24 * 2 type Jwt struct { Id int `json:"id"` User string `json:"user"` jwt.StandardClaims }
func GenerateTokenHandler(c *gin.Context) { var claim Jwt c.ShouldBindJSON(&claim) claim.ExpiresAt = time.Now().Add(ExpireTime).Unix() claim.Issuer = "SYMC" token, err := GenToken(claim) if err != nil { c.JSON(400, gin.H{ "code": 400, "msg": "error", }) } c.JSON(200, gin.H{ "code": 200, "msg": "success", "token": token, }) } func GenToken(claim Jwt) (string, error) { token := jwt.NewWithClaims(jwt.SigningMethodHS256, claim) signedToken, err := token.SignedString("SYMC") if err != nil { return "", err } return signedToken, nil } func ParseToken(tokenStr string) (*Jwt, error) { token, err := jwt.ParseWithClaims(tokenStr, &Jwt{}, func(token *jwt.Token) (interface{}, error) { return secret, nil }) if err != nil { return nil, err } claim, ok := token.Claims.(*Jwt) if ok && token.Valid { return claim, nil } return nil, errors.New("invalid token") }
|