package models import ( // "errors" // "strconv" "time" jwt "github.com/dgrijalva/jwt-go" ) const ( JWT_Secret = "jwt-dashoo-1705" JWT_Issuer = "dashoo.cn" JWT_Audience = "dashoo" JWT_Expires = 24 * 60 * 60 // 24h ) type Claims struct { // This will hold a users username after authenticating Username string `json:"username"` // This will hold claims that are recommended having (Expiration, issuer) jwt.StandardClaims } type User4CreateToken struct { Username string `json:"username"` Password string `json:"password"` } // 返回客户端的token信息 type UserToken struct { Token string `json:"token"` } // 从token中获取的用户信息 type UserInfo struct { Id string Username string Realname string AccCode string Roles string Power string DepartmentId string Description string IsCompanyUser int Superior string Uint string } // 建立JWT Token func CreateToken(user string) (UserToken, error) { claims := Claims{ user, jwt.StandardClaims{ NotBefore: int64(time.Now().Unix()), ExpiresAt: int64(time.Now().Unix() + JWT_Expires), Issuer: JWT_Issuer, }, } // Create the token using your claims token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) signedToken, err := token.SignedString([]byte(JWT_Secret)) userToken := UserToken{Token: signedToken} return userToken, err } // 验证JWT Token func CheckToken(signedToken string) (*UserInfo, error) { var userinfo UserInfo token, err := jwt.ParseWithClaims(signedToken, &Claims{}, func(token *jwt.Token) (interface{}, error) { return []byte(JWT_Secret), nil }) if claims, ok := token.Claims.(*Claims); ok && token.Valid { //fmt.Printf("%v %v", claims.Username, claims.StandardClaims.ExpiresAt) //fmt.Println(reflect.TypeOf(claims.StandardClaims.ExpiresAt)) userinfo.Username = claims.Username return &userinfo, err } return nil, err }