jwt.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package jwt
  2. import (
  3. "fmt"
  4. "kpt-tmr-group/config"
  5. "kpt-tmr-group/pkg/tool"
  6. "reflect"
  7. "time"
  8. "github.com/dgrijalva/jwt-go"
  9. )
  10. var jwtSecret = []byte(config.Options().JwtSecret)
  11. type Claims struct {
  12. Username string `json:"username"`
  13. Password string `json:"password"`
  14. jwt.StandardClaims
  15. }
  16. func GenerateToken(username, password string) (string, error) {
  17. nowTime := time.Now()
  18. expireTime := nowTime.Add(2 * time.Hour)
  19. claims := Claims{
  20. username,
  21. tool.Md5String(password),
  22. jwt.StandardClaims{
  23. ExpiresAt: expireTime.Unix(),
  24. Issuer: "https://github.com/kptyun/go-admin/",
  25. },
  26. }
  27. tokenClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
  28. return tokenClaims.SignedString(jwtSecret)
  29. }
  30. func ParseToken(token string) (*Claims, error) {
  31. tokenClaims, err := jwt.ParseWithClaims(token, &Claims{}, func(token *jwt.Token) (interface{}, error) {
  32. return jwtSecret, nil
  33. })
  34. if tokenClaims != nil {
  35. if claims, ok := tokenClaims.Claims.(*Claims); ok && tokenClaims.Valid {
  36. return claims, nil
  37. }
  38. }
  39. return nil, err
  40. }
  41. func GetIdFromClaims(key string, claims jwt.Claims) string {
  42. v := reflect.ValueOf(claims)
  43. if v.Kind() == reflect.Map {
  44. for _, k := range v.MapKeys() {
  45. value := v.MapIndex(k)
  46. if fmt.Sprintf("%s", k.Interface()) == key {
  47. return fmt.Sprintf("%v", value.Interface())
  48. }
  49. }
  50. }
  51. return ""
  52. }