jwt_utils.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package jwt
  2. import (
  3. logger "eta/eta_mini_ht_api/common/component/log"
  4. "eta/eta_mini_ht_api/common/exception"
  5. "github.com/dgrijalva/jwt-go"
  6. "time"
  7. )
  8. type Claims struct {
  9. OpenId string `json:"open_id"`
  10. Mobile string `json:"mobile"`
  11. jwt.StandardClaims
  12. }
  13. var (
  14. KEY = []byte("5Mb5Gdmb5y")
  15. )
  16. // CreateToken 生成token
  17. func CreateToken(openId string, mobile string) (tokenString string, err error) {
  18. claims := &Claims{
  19. openId,
  20. mobile,
  21. jwt.StandardClaims{
  22. NotBefore: time.Now().Unix(),
  23. ExpiresAt: time.Now().Add(time.Hour * 24 * 90).Unix(),
  24. },
  25. }
  26. token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
  27. tokenString, err = token.SignedString(KEY)
  28. if err != nil {
  29. logger.Error("生成token失败", err)
  30. }
  31. tokenString = "Bearer " + tokenString
  32. return
  33. }
  34. type JwtInfo struct {
  35. OpenId string
  36. Mobile string
  37. }
  38. // CheckToken 校验token
  39. func CheckToken(tokenStr string) (info JwtInfo, err error) {
  40. token, err := jwt.Parse(tokenStr, func(*jwt.Token) (interface{}, error) {
  41. return KEY, nil
  42. })
  43. if err != nil {
  44. logger.Error("解析Token失败:%v", err)
  45. err = exception.New(exception.JWTTokenDecodeFailed)
  46. return
  47. }
  48. if claims, ok := token.Claims.(jwt.MapClaims); ok {
  49. nbf, _ := claims["nbf"].(float64)
  50. exp, _ := claims["exp"].(float64)
  51. if float64(time.Now().Unix()) < nbf {
  52. logger.Error("Token无效")
  53. err = exception.New(exception.JWTTokenInvalid)
  54. return
  55. }
  56. if float64(time.Now().Unix()) >= exp {
  57. logger.Error("Token已过期")
  58. err = exception.New(exception.JWTTokenExpired)
  59. return
  60. }
  61. info = JwtInfo{
  62. OpenId: claims["open_id"].(string),
  63. Mobile: claims["mobile"].(string),
  64. }
  65. return
  66. }
  67. logger.Error("claims解析失败")
  68. err = exception.New(exception.JWTTokenDecodeFailed)
  69. return
  70. }