jwt_utils.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. return
  32. }
  33. type JwtInfo struct {
  34. OpenId string
  35. Mobile string
  36. }
  37. // CheckToken 校验token
  38. func CheckToken(tokenStr string) (info JwtInfo, err error) {
  39. token, err := jwt.Parse(tokenStr, func(*jwt.Token) (interface{}, error) {
  40. return KEY, nil
  41. })
  42. if err != nil {
  43. logger.Error("解析Token失败:%v", err)
  44. err = exception.New(exception.JWTTokenDecodeFailed)
  45. return
  46. }
  47. if claims, ok := token.Claims.(jwt.MapClaims); ok {
  48. nbf, _ := claims["nbf"].(float64)
  49. exp, _ := claims["exp"].(float64)
  50. if float64(time.Now().Unix()) < nbf {
  51. logger.Error("Token无效")
  52. err = exception.New(exception.JWTTokenInvalid)
  53. return
  54. }
  55. if float64(time.Now().Unix()) >= exp {
  56. logger.Error("Token已过期")
  57. err = exception.New(exception.JWTTokenExpired)
  58. return
  59. }
  60. info = JwtInfo{
  61. OpenId: claims["open_id"].(string),
  62. Mobile: claims["mobile"].(string),
  63. }
  64. return
  65. }
  66. logger.Error("claims解析失败")
  67. err = exception.New(exception.JWTTokenDecodeFailed)
  68. return
  69. }