json.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package share
  2. import (
  3. "crypto/rand"
  4. "errors"
  5. "fmt"
  6. "github.com/dgrijalva/jwt-go"
  7. "github.com/gin-gonic/gin"
  8. "math/big"
  9. "time"
  10. )
  11. const (
  12. SECRETKEY = "243223ffslsfsldfl412fdsfsdf" //私钥
  13. )
  14. type CustomClaims struct {
  15. UserId int64
  16. jwt.StandardClaims
  17. }
  18. func GetJsonAnyParam(c *gin.Context) func(param string) (interface{}, error) {
  19. jsonData := map[string]interface{}{}
  20. err := c.BindJSON(&jsonData)
  21. return func(param string) (interface{}, error) {
  22. if err != nil {
  23. return nil, err
  24. }
  25. value, err := func() (interface{}, error) {
  26. i, exists := jsonData[param]
  27. if !exists {
  28. return nil, errors.New("缺少" + param + "字段")
  29. }
  30. return i, nil
  31. }()
  32. if err != nil {
  33. return nil, err
  34. }
  35. return value, err
  36. }
  37. }
  38. func GenerateToken(userId string) (string, error) {
  39. maxAge := 60 * 60 * 24
  40. // Create the Claims
  41. claims := &jwt.StandardClaims{
  42. ExpiresAt: time.Now().Add(time.Duration(maxAge) * time.Second).Unix(), // 过期时间,必须设置,
  43. Issuer: userId, // 非必须,也可以填充用户名,
  44. }
  45. token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
  46. tokenString, err := token.SignedString([]byte(SECRETKEY))
  47. if err != nil {
  48. fmt.Println(err)
  49. }
  50. return tokenString, err
  51. }
  52. func ParseToken(tokenString string) (jwt.MapClaims, error) {
  53. token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
  54. // Don't forget to validate the alg is what you expect:
  55. if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
  56. return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])
  57. }
  58. // hmacSampleSecret is a []byte containing your secret, e.g. []byte("my_secret_key")
  59. return []byte(SECRETKEY), nil
  60. })
  61. if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
  62. return claims, nil
  63. } else {
  64. return nil, err
  65. }
  66. }
  67. //权限判断,废弃
  68. //func JwtMiddleware() gin.HandlerFunc {
  69. // return func(c *gin.Context) {
  70. // tokenString := c.GetHeader("auth-sign")
  71. // if tokenString == "" {
  72. // c.JSON(401, gin.H{"message": "缺少token"})
  73. // c.Abort()
  74. // return
  75. // }
  76. //
  77. // token, err := ParseToken(tokenString)
  78. //
  79. // if err != nil {
  80. // c.JSON(401, gin.H{"message": "无效令牌"})
  81. // c.Abort()
  82. // return
  83. // }
  84. // users := make([]configs.MysqlData, 0)
  85. // bools, err := configs.Engine.Table("user").
  86. // Join("INNER", "role", "role.id = user.role_id").
  87. // Join("INNER", "role_authority", "role_authority.authority_id = role.id").
  88. // Join("INNER", "authority", "authority.id = role_authority.authority_id").
  89. // Where("authority.authority_path=?", c.Request.URL.Path).
  90. // Where("user.id = ?", token["iss"]).
  91. // Exist(&users)
  92. // if err == nil {
  93. // fmt.Println(bools)
  94. // if bools {
  95. // c.Next()
  96. // } else {
  97. // c.JSON(200, gin.H{"message": "权限不足"})
  98. // c.Abort()
  99. // return
  100. // }
  101. // }
  102. //
  103. // }
  104. //}
  105. func RandomInt(min, max *big.Int) *big.Int {
  106. // 读取密码学安全的随机比特
  107. byteLen := (max.BitLen() + 7) / 8
  108. b := make([]byte, byteLen)
  109. rand.Read(b)
  110. // 将字节转换为大整数
  111. r := new(big.Int).SetBytes(b)
  112. // 需要将生成的大整数范围限制在[min,max]
  113. r.Rem(r, new(big.Int).Sub(max, min)).Add(r, min)
  114. return r
  115. }