token.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package util
  2. import (
  3. "dsbqj-admin/pkg/logger"
  4. "encoding/base64"
  5. "github.com/goccy/go-json"
  6. )
  7. //var jwtSecret []byte
  8. //
  9. //type Claims struct {
  10. // ID string
  11. // UserName string
  12. // jwt.StandardClaims
  13. //}
  14. //
  15. //// GenerateToken generate tokens used for auth
  16. //func GenerateToken(user model.User, secret string) (string, error) {
  17. // nowTime := time.Now()
  18. // expireTime := nowTime.Add(3 * time.Hour)
  19. //
  20. // claims := Claims{
  21. // EncodeMD5(hashid.HashID(user.ID, hashid.UserID)),
  22. // EncodeMD5(user.UserName),
  23. //
  24. // jwt.StandardClaims{
  25. // ExpiresAt: expireTime.Unix(),
  26. // Issuer: "gin-blog",
  27. // },
  28. // }
  29. //
  30. // tokenClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
  31. // token, err := tokenClaims.SignedString(jwtSecret)
  32. //
  33. // return token, err
  34. //}
  35. //
  36. //// ParseToken parsing token
  37. //func ParseToken(token string, secret string) (*Claims, error) {
  38. // tokenClaims, err := jwt.ParseWithClaims(token, &Claims{}, func(token *jwt.Token) (interface{}, error) {
  39. // return jwtSecret, nil
  40. // })
  41. //
  42. // if tokenClaims != nil {
  43. // if claims, ok := tokenClaims.Claims.(*Claims); ok && tokenClaims.Valid {
  44. // return claims, nil
  45. // }
  46. // }
  47. //
  48. // return nil, err
  49. //}
  50. type Token struct {
  51. ID uint `json:"id"`
  52. Status string `json:"status"`
  53. Role string `json:"role"`
  54. Gender string `json:"gender"`
  55. ExpiresIn int64 `json:"expires_in"`
  56. CreateAt int64 `json:"create_at"`
  57. }
  58. func GenerateToken(src interface{}, key string) string {
  59. ci := NewAesCipher128([]byte(key), []byte("Power-Doom"))
  60. //转json
  61. j, err := json.Marshal(src)
  62. if err != nil {
  63. logger.Error("数据转换错误", err)
  64. return ""
  65. }
  66. res := ci.Encrypt(j)
  67. return base64.StdEncoding.EncodeToString(res)
  68. }
  69. func ParseToken(src string, key string) []byte {
  70. defer func() {
  71. err := recover() //内置函数,可以捕捉到函数异常
  72. if err != nil {
  73. //这里是打印错误,还可以进行报警处理,例如微信,邮箱通知
  74. logger.Error("token解析错误:", err)
  75. }
  76. }()
  77. plain, err := base64.StdEncoding.DecodeString(src)
  78. if err != nil {
  79. logger.Error("token解析错误", err)
  80. return []byte{}
  81. }
  82. ci := NewAesCipher128([]byte(key), []byte("Power-Doom"))
  83. return ci.Decrypt(plain)
  84. }