jwt.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*
  2. * @Author: LinkLeong link@icewhale.com
  3. * @Date: 2021-09-30 18:18:14
  4. * @LastEditors: LinkLeong
  5. * @LastEditTime: 2022-07-18 17:30:38
  6. * @FilePath: /CasaOS/pkg/utils/jwt/jwt.go
  7. * @Description:
  8. * @Website: https://www.casaos.io
  9. * Copyright (c) 2022 by icewhale, All Rights Reserved.
  10. */
  11. package jwt
  12. import (
  13. "time"
  14. jwt "github.com/golang-jwt/jwt/v4"
  15. )
  16. type Claims struct {
  17. Username string `json:"username"`
  18. PassWord string `json:"password"`
  19. Id int `json:"id"`
  20. jwt.RegisteredClaims
  21. }
  22. var jwtSecret []byte
  23. //创建token
  24. func GenerateToken(username, password string, id int, issuer string, t time.Duration) (string, error) {
  25. clims := Claims{
  26. username,
  27. password,
  28. id,
  29. jwt.RegisteredClaims{
  30. ExpiresAt: jwt.NewNumericDate(time.Now().Add(t)),
  31. IssuedAt: jwt.NewNumericDate(time.Now()),
  32. NotBefore: jwt.NewNumericDate(time.Now()),
  33. Issuer: issuer,
  34. },
  35. }
  36. tokenClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, clims)
  37. token, err := tokenClaims.SignedString(jwtSecret)
  38. return token, err
  39. }
  40. //解析token
  41. func ParseToken(token string, valid bool) (*Claims, error) {
  42. tokenClaims, err := jwt.ParseWithClaims(token, &Claims{}, func(token *jwt.Token) (interface{}, error) {
  43. return jwtSecret, nil
  44. })
  45. if tokenClaims != nil {
  46. if clims, ok := tokenClaims.Claims.(*Claims); ok {
  47. if valid && tokenClaims.Valid {
  48. return clims, nil
  49. } else if !valid {
  50. return clims, nil
  51. }
  52. }
  53. }
  54. return nil, err
  55. }