智盟项目
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

42 líneas
1.1 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(admId int, username string) (string, error) {
  10. // 创建一个我们自己的声明
  11. c := auth.JWTUser{
  12. AdmId: admId,
  13. Username: username,
  14. StandardClaims: jwt.StandardClaims{
  15. ExpiresAt: time.Now().Add(auth.TokenExpireDuration).Unix(), // 过期时间
  16. Issuer: "zyos", // 签发人
  17. },
  18. }
  19. // 使用指定的签名方法创建签名对象
  20. token := jwt.NewWithClaims(jwt.SigningMethodHS256, c)
  21. // 使用指定的secret签名并获得完整的编码后的字符串token
  22. return token.SignedString(auth.Secret)
  23. }
  24. // ParseToken 解析JWT
  25. func ParseToken(tokenString string) (*auth.JWTUser, error) {
  26. // 解析token
  27. token, err := jwt.ParseWithClaims(tokenString, &auth.JWTUser{}, func(token *jwt.Token) (i interface{}, err error) {
  28. return auth.Secret, nil
  29. })
  30. if err != nil {
  31. return nil, err
  32. }
  33. if claims, ok := token.Claims.(*auth.JWTUser); ok && token.Valid { // 校验token
  34. return claims, nil
  35. }
  36. return nil, errors.New("invalid token")
  37. }