12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- 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
- }
|