jwt.go 1.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package utils
  2. import (
  3. "errors"
  4. "time"
  5. jwt "github.com/dgrijalva/jwt-go"
  6. )
  7. const (
  8. TokenHeader = "Authorization"
  9. TokenSchema = "Bearer"
  10. )
  11. var tokenSignedKey = []byte(`Yansen is so handsome!`)
  12. // CreateToken 获取token
  13. func CreateToken(info map[string]interface{}) (string, error) {
  14. claims := jwt.MapClaims(info)
  15. token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
  16. return token.SignedString(tokenSignedKey)
  17. }
  18. // PareseToken 解析 token
  19. func PareseToken(token string) (map[string]interface{}, error) {
  20. tk, err := jwt.Parse(token, func(t *jwt.Token) (interface{}, error) {
  21. return tokenSignedKey, nil
  22. })
  23. if err != nil {
  24. return nil, err
  25. }
  26. if claims, ok := tk.Claims.(jwt.MapClaims); ok && tk.Valid {
  27. info := map[string]interface{}(claims)
  28. return info, nil
  29. }
  30. return nil, errors.New("Token 解析 未知错误")
  31. }
  32. // JWTToken token 内容
  33. type JWTToken struct {
  34. Guest bool
  35. ID string
  36. Password string
  37. BatchNo string
  38. Expire time.Time
  39. }
  40. // ToMap 转 map
  41. func (t *JWTToken) ToMap() map[string]interface{} {
  42. return map[string]interface{}{
  43. "guest": t.Guest,
  44. "user": t.ID,
  45. "password": t.Password,
  46. "batchno": t.BatchNo,
  47. "exp": t.Expire.Format("2006-01-02 15:04:05"),
  48. }
  49. }
  50. // MapToJWTToken map 映射 Token
  51. func MapToJWTToken(data map[string]interface{}) *JWTToken {
  52. token := JWTToken{}
  53. if data["guest"] != nil {
  54. token.Guest = data["guest"].(bool)
  55. }
  56. if data["user"] != nil {
  57. token.ID = data["user"].(string)
  58. }
  59. if data["password"] != nil {
  60. token.Password = data["password"].(string)
  61. }
  62. if data["batchno"] != nil {
  63. token.BatchNo = data["batchno"].(string)
  64. }
  65. if data["exp"] != nil {
  66. exp, _ := time.Parse("2006-01-02 15:04:05", data["exp"].(string))
  67. token.Expire = exp
  68. }
  69. return &token
  70. }