| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package tools
- import (
- "time"
- "github.com/dgrijalva/jwt-go"
- "github.com/pkg/errors"
- )
- const (
- jwtSecretKey = "@MKU^KNGTF%K^#VJ<TAHCVD#$XZSWQ@L"
- )
- func NewJWT(userID string, exp time.Duration) (string, error) {
- token := jwt.New(jwt.SigningMethodHS256)
- claims := make(jwt.MapClaims)
- if exp > 0 {
- claims["exp"] = time.Now().Add(exp * time.Second).Unix()
- }
- claims["aud"] = userID
- claims["iat"] = time.Now().Unix()
- token.Claims = claims
- tokenString, err := token.SignedString([]byte(jwtSecretKey))
- if err != nil {
- return "", err
- }
- return tokenString, nil
- }
- func CheckJWT(tokenStr string) (bool, string, error) {
- token, err := jwt.Parse(tokenStr, func(token *jwt.Token) (interface{}, error) {
- return []byte(jwtSecretKey), nil
- })
- if err != nil {
- validationErr, ok := err.(*jwt.ValidationError)
- if !ok {
- return false, "", err
- }
- if validationErr.Errors == jwt.ValidationErrorExpired {
- return false, "", nil
- }
- return false, "", err
- }
- claims, ok := token.Claims.(jwt.MapClaims)
- if !ok {
- return false, "", errors.New("类型转换失败")
- }
- userID, ok := claims["aud"].(string)
- if !ok {
- return false, "", errors.New("类型转换失败")
- }
- return token.Valid, userID, nil
- }
|