package utils import ( "errors" "time" jwt "github.com/dgrijalva/jwt-go" ) const ( TokenHeader = "Authorization" TokenSchema = "Bearer" ) var tokenSignedKey = []byte(`Yansen is so handsome!`) // CreateToken 获取token func CreateToken(info map[string]interface{}) (string, error) { claims := jwt.MapClaims(info) token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) return token.SignedString(tokenSignedKey) } // PareseToken 解析 token func PareseToken(token string) (map[string]interface{}, error) { tk, err := jwt.Parse(token, func(t *jwt.Token) (interface{}, error) { return tokenSignedKey, nil }) if err != nil { return nil, err } if claims, ok := tk.Claims.(jwt.MapClaims); ok && tk.Valid { info := map[string]interface{}(claims) return info, nil } return nil, errors.New("Token 解析 未知错误") } // JWTToken token 内容 type JWTToken struct { Guest bool ID string Password string BatchNo string Expire time.Time } // ToMap 转 map func (t *JWTToken) ToMap() map[string]interface{} { return map[string]interface{}{ "guest": t.Guest, "user": t.ID, "password": t.Password, "batchno": t.BatchNo, "exp": t.Expire.Format("2006-01-02 15:04:05"), } } // MapToJWTToken map 映射 Token func MapToJWTToken(data map[string]interface{}) *JWTToken { token := JWTToken{} if data["guest"] != nil { token.Guest = data["guest"].(bool) } if data["user"] != nil { token.ID = data["user"].(string) } if data["password"] != nil { token.Password = data["password"].(string) } if data["batchno"] != nil { token.BatchNo = data["batchno"].(string) } if data["exp"] != nil { exp, _ := time.Parse("2006-01-02 15:04:05", data["exp"].(string)) token.Expire = exp } return &token }