智盟项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
1.9 KiB

  1. package utils
  2. import (
  3. "applet/app/lib/auth"
  4. "errors"
  5. "time"
  6. "github.com/dgrijalva/jwt-go"
  7. )
  8. // GenToken 生成JWT
  9. func GenToken(masterId string) (aToken, rToken string, err error) {
  10. // 创建一个我们自己的声明
  11. c := auth.JWTMaster{
  12. masterId,
  13. jwt.StandardClaims{
  14. ExpiresAt: time.Now().Add(auth.TokenExpireDuration).Unix(), // 过期时间
  15. Issuer: "zyos_zhimeng", // 签发人
  16. },
  17. }
  18. // 使用指定的签名方法创建签名对象
  19. token := jwt.NewWithClaims(jwt.SigningMethodHS256, c)
  20. // 使用指定的secret签名并获得完整的编码后的字符串token
  21. aToken, err = token.SignedString(auth.Secret)
  22. if err != nil {
  23. return "", "", err
  24. }
  25. // rToken 生成
  26. rc := auth.JWTMaster{
  27. masterId,
  28. jwt.StandardClaims{
  29. ExpiresAt: time.Now().Add(auth.RefreshTokenExpireDuration).Unix(), // 过期时间
  30. Issuer: "zyos_zhimeng", // 签发人
  31. },
  32. }
  33. rToken, err = jwt.NewWithClaims(jwt.SigningMethodHS256, rc).SignedString(auth.RSecret)
  34. return
  35. }
  36. // ParseToken 解析JWT
  37. func ParseToken(tokenString string) (*auth.JWTMaster, error) {
  38. // 解析token
  39. token, err := jwt.ParseWithClaims(tokenString, &auth.JWTMaster{}, func(token *jwt.Token) (i interface{}, err error) {
  40. return auth.Secret, nil
  41. })
  42. if err != nil {
  43. return nil, err
  44. }
  45. if claims, ok := token.Claims.(*auth.JWTMaster); ok && token.Valid { // 校验token
  46. return claims, nil
  47. }
  48. return nil, errors.New("invalid token")
  49. }
  50. // ParseRToken 解析JWT
  51. func ParseRToken(tokenString string) (*auth.JWTMaster, error) {
  52. // 解析token
  53. token, err := jwt.ParseWithClaims(tokenString, &auth.JWTMaster{}, func(token *jwt.Token) (i interface{}, err error) {
  54. return auth.RSecret, nil
  55. })
  56. if err != nil {
  57. return nil, err
  58. }
  59. if claims, ok := token.Claims.(*auth.JWTMaster); ok && token.Valid { // 校验token
  60. return claims, nil
  61. }
  62. return nil, errors.New("invalid token")
  63. }