3
2

token.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package models
  2. import (
  3. // "errors"
  4. // "strconv"
  5. "time"
  6. jwt "github.com/dgrijalva/jwt-go"
  7. )
  8. const (
  9. JWT_Secret = "jwt-dashoo-1705"
  10. JWT_Issuer = "dashoo.cn"
  11. JWT_Audience = "dashoo"
  12. JWT_Expires = 24 * 60 * 60 // 24h
  13. )
  14. type Claims struct {
  15. // This will hold a users username after authenticating
  16. Username string `json:"username"`
  17. // This will hold claims that are recommended having (Expiration, issuer)
  18. jwt.StandardClaims
  19. }
  20. type User4CreateToken struct {
  21. Username string `json:"username"`
  22. Password string `json:"password"`
  23. }
  24. // 返回客户端的token信息
  25. type UserToken struct {
  26. Token string `json:"token"`
  27. }
  28. // 从token中获取的用户信息
  29. type UserInfo struct {
  30. Id string
  31. Username string
  32. Realname string
  33. AccCode string
  34. Roles string
  35. Power string
  36. DepartmentId string
  37. Description string
  38. IsCompanyUser int
  39. Superior string
  40. Uint string
  41. }
  42. // 建立JWT Token
  43. func CreateToken(user string) (UserToken, error) {
  44. claims := Claims{
  45. user,
  46. jwt.StandardClaims{
  47. NotBefore: int64(time.Now().Unix()),
  48. ExpiresAt: int64(time.Now().Unix() + JWT_Expires),
  49. Issuer: JWT_Issuer,
  50. },
  51. }
  52. // Create the token using your claims
  53. token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
  54. signedToken, err := token.SignedString([]byte(JWT_Secret))
  55. userToken := UserToken{Token: signedToken}
  56. return userToken, err
  57. }
  58. // 验证JWT Token
  59. func CheckToken(signedToken string) (*UserInfo, error) {
  60. var userinfo UserInfo
  61. token, err := jwt.ParseWithClaims(signedToken, &Claims{}, func(token *jwt.Token) (interface{}, error) {
  62. return []byte(JWT_Secret), nil
  63. })
  64. if claims, ok := token.Claims.(*Claims); ok && token.Valid {
  65. //fmt.Printf("%v %v", claims.Username, claims.StandardClaims.ExpiresAt)
  66. //fmt.Println(reflect.TypeOf(claims.StandardClaims.ExpiresAt))
  67. userinfo.Username = claims.Username
  68. return &userinfo, err
  69. }
  70. return nil, err
  71. }