package jwt import ( "time" "github.com/golang-jwt/jwt/v4" ) type Token struct { ID string `json:"id"` UID string `json:"uid"` DeviceID string `json:"device_id"` AccessToken string `json:"access_token"` ExpiresIn int `json:"expires_in"` AccessCreateAt time.Time `json:"access_create_at"` RefreshToken string `json:"refresh_token"` RefreshExpiresIn int `json:"refresh_expires_in"` RefreshCreateAt time.Time `json:"refresh_create_at"` } func (t *Token) AccessTokenExpires() time.Duration { return time.Duration(t.ExpiresIn) * time.Second } func (t *Token) RefreshTokenExpires() time.Duration { return time.Duration(t.RefreshExpiresIn) * time.Second } func (t *Token) RefreshTokenExpiresUnix() int64 { return time.Now().Add(t.RefreshTokenExpires()).Unix() } func (t *Token) IsExpires() bool { return t.AccessCreateAt.Add(t.AccessTokenExpires()).Before(time.Now()) } func (t *Token) RedisExpiredSec() int64 { sec := time.Unix(int64(t.ExpiresIn), 0).Sub(time.Now().UTC()) return int64(sec.Seconds()) } func (t *Token) RedisRefreshExpiredSec() int64 { sec := time.Unix(int64(t.RefreshExpiresIn), 0).Sub(time.Now().UTC()) return int64(sec.Seconds()) } type Claims struct { jwt.RegisteredClaims Data interface{} `json:"data"` }