jwt.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package utils
  2. import (
  3. "github.com/dgrijalva/jwt-go"
  4. "github.com/gin-gonic/gin"
  5. "strconv"
  6. "time"
  7. )
  8. var jwtSecret = []byte("martin")
  9. type Claims struct {
  10. Username string `json:"username"`
  11. Rolename string `json:"rolename"`
  12. UserId string `json:"userid"`
  13. Id int `json:"id"`
  14. jwt.StandardClaims
  15. }
  16. func GenerateToken(username, rolename, userid string, id int) (string, error) {
  17. nowTime := time.Now()
  18. expireTime := nowTime.Add(3 * time.Hour)
  19. claims := Claims{
  20. username,
  21. rolename,
  22. userid,
  23. id,
  24. jwt.StandardClaims{
  25. ExpiresAt: expireTime.Unix(),
  26. Issuer: "gin-blog",
  27. },
  28. }
  29. tokenClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
  30. token, err := tokenClaims.SignedString(jwtSecret)
  31. return token, err
  32. }
  33. func ParseToken(token string) (*Claims, error) {
  34. tokenClaims, err := jwt.ParseWithClaims(token, &Claims{}, func(token *jwt.Token) (interface{}, error) {
  35. return jwtSecret, nil
  36. })
  37. if tokenClaims != nil {
  38. if claims, ok := tokenClaims.Claims.(*Claims); ok && tokenClaims.Valid {
  39. return claims, nil
  40. }
  41. }
  42. return nil, err
  43. }
  44. func GetId(c *gin.Context) int64 {
  45. valueString := c.GetString("CONTEXT_ID")
  46. val, _ := strconv.ParseInt(valueString, 10, 64)
  47. return val
  48. }
  49. func GetUserId(c *gin.Context) int64 {
  50. valueString := c.GetString("CONTEXT_USER_ID")
  51. val, _ := strconv.ParseInt(valueString, 10, 64)
  52. return val
  53. }
  54. func GetRoleName(c *gin.Context) string {
  55. return c.GetString("CONTEXT_ROLE_NAME")
  56. }