token.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package token
  2. import (
  3. "errors"
  4. "github.com/dgrijalva/jwt-go"
  5. "time"
  6. )
  7. var JwtClaims = new(jwtClaims)
  8. // JwtClaims 创建自己的Claims
  9. type jwtClaims struct {
  10. *jwt.StandardClaims
  11. //用户编号
  12. ID string
  13. UserName string
  14. UUID string
  15. }
  16. var (
  17. //盐
  18. secret = []byte("6MTY2MDcxMjgzNiwi") // 后续加密增加盐增加复杂度
  19. TokenExpired error = errors.New("Token is expired") // token错误类型提炼
  20. TokenNotValidYet error = errors.New("Token not active yet") // token错误类型提炼
  21. TokenMalformed error = errors.New("That's not even a token") // token错误类型提炼
  22. TokenInvalid error = errors.New("Couldn't handle this token:") // token错误类型提炼
  23. )
  24. // CreateJwtToken 生成一个jwttoken
  25. func (jwtClaims) CreateJwtToken(id string, userName string, uuid string) (string, error) {
  26. // 定义过期时间
  27. //expireToken := time.Now().Add(time.Minute * 1).Unix()
  28. claims := jwtClaims{
  29. &jwt.StandardClaims{
  30. NotBefore: int64(time.Now().Unix() - 1000), // token信息生效时间
  31. ExpiresAt: 0, // 过期时间永不过期
  32. Issuer: "lc_veterans", // 发布者
  33. },
  34. id,
  35. userName,
  36. uuid,
  37. }
  38. // 对自定义claims加密,jwt.SigningMethodHS256是加密算法得到第二部分
  39. token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
  40. // 给这个token盐加密 第三部分,得到一个完整的三段的加密
  41. signedToken, err := token.SignedString(secret)
  42. if err != nil {
  43. return "", err
  44. }
  45. return signedToken, nil
  46. }
  47. // ParseJwtToken 解析token得到是自己创建的Claims
  48. func (jwtClaims) ParseJwtToken(jwtToken string) (*jwtClaims, error) {
  49. var jwtclaim = &jwtClaims{}
  50. _, err := jwt.ParseWithClaims(jwtToken, jwtclaim, func(*jwt.Token) (interface{}, error) {
  51. //得到盐
  52. return secret, nil
  53. })
  54. if err != nil {
  55. if ve, ok := err.(*jwt.ValidationError); ok {
  56. if ve.Errors&jwt.ValidationErrorMalformed != 0 {
  57. return nil, TokenMalformed
  58. } else if ve.Errors&jwt.ValidationErrorExpired != 0 {
  59. // Token is expired
  60. return nil, TokenExpired
  61. } else if ve.Errors&jwt.ValidationErrorNotValidYet != 0 {
  62. return nil, TokenNotValidYet
  63. } else {
  64. return nil, TokenInvalid
  65. }
  66. }
  67. }
  68. return jwtclaim, nil
  69. }