fsjwt.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package tools
  2. import (
  3. "time"
  4. "github.com/dgrijalva/jwt-go"
  5. "github.com/pkg/errors"
  6. )
  7. const (
  8. jwtSecretKey = "@MKU^KNGTF%K^#VJ<TAHCVD#$XZSWQ@L"
  9. )
  10. func NewJWT(userID string, exp time.Duration) (string, error) {
  11. token := jwt.New(jwt.SigningMethodHS256)
  12. claims := make(jwt.MapClaims)
  13. if exp > 0 {
  14. claims["exp"] = time.Now().Add(exp * time.Second).Unix()
  15. }
  16. claims["aud"] = userID
  17. claims["iat"] = time.Now().Unix()
  18. token.Claims = claims
  19. tokenString, err := token.SignedString([]byte(jwtSecretKey))
  20. if err != nil {
  21. return "", err
  22. }
  23. return tokenString, nil
  24. }
  25. func CheckJWT(tokenStr string) (bool, string, error) {
  26. token, err := jwt.Parse(tokenStr, func(token *jwt.Token) (interface{}, error) {
  27. return []byte(jwtSecretKey), nil
  28. })
  29. if err != nil {
  30. validationErr, ok := err.(*jwt.ValidationError)
  31. if !ok {
  32. return false, "", err
  33. }
  34. if validationErr.Errors == jwt.ValidationErrorExpired {
  35. return false, "", nil
  36. }
  37. return false, "", err
  38. }
  39. claims, ok := token.Claims.(jwt.MapClaims)
  40. if !ok {
  41. return false, "", errors.New("类型转换失败")
  42. }
  43. userID, ok := claims["aud"].(string)
  44. if !ok {
  45. return false, "", errors.New("类型转换失败")
  46. }
  47. return token.Valid, userID, nil
  48. }