附近小店
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

47 lines
1.2 KiB

  1. package utils
  2. import (
  3. "errors"
  4. "time"
  5. "applet/app/lib/auth"
  6. "github.com/dgrijalva/jwt-go"
  7. )
  8. // GenToken 生成JWT
  9. func GenToken(uid int, username, phone, appname, MiniOpenID, MiniSK string) (string, error) {
  10. // 创建一个我们自己的声明
  11. c := auth.JWTUser{
  12. uid,
  13. username,
  14. phone,
  15. appname,
  16. MiniOpenID,
  17. MiniSK,
  18. jwt.StandardClaims{
  19. ExpiresAt: time.Now().Add(auth.TokenExpireDuration).Unix(), // 过期时间
  20. Issuer: "zyos", // 签发人
  21. },
  22. }
  23. // 使用指定的签名方法创建签名对象
  24. token := jwt.NewWithClaims(jwt.SigningMethodHS256, c)
  25. // 使用指定的secret签名并获得完整的编码后的字符串token
  26. return token.SignedString(auth.Secret)
  27. }
  28. // ParseToken 解析JWT
  29. func ParseToken(tokenString string) (*auth.JWTUser, error) {
  30. // 解析token
  31. token, err := jwt.ParseWithClaims(tokenString, &auth.JWTUser{}, func(token *jwt.Token) (i interface{}, err error) {
  32. return auth.Secret, nil
  33. })
  34. if err != nil {
  35. return nil, err
  36. }
  37. if claims, ok := token.Claims.(*auth.JWTUser); ok && token.Valid { // 校验token
  38. return claims, nil
  39. }
  40. return nil, errors.New("invalid token")
  41. }