【发布时间】:2016-12-31 09:19:09
【问题描述】:
我正在使用
设置 JWT 令牌声明的过期时间claims["exp"] = time.Now().Add(time.Hour * time.Duration(settings.Get().JWTExpiration)).Unix()
其中 settings.Get().JWTExpiration 为我提供了我在应用程序设置文件中所做的设置。
我已经编写了一个函数,理想情况下应该给我令牌有效的剩余时间。
func getTokenRemainingValidity(timestamp interface{}) int {
if validity, ok := timestamp.(float64); ok {
tm := time.Unix(int64(validity), 0)
remainder := tm.Sub(time.Now())
if remainder > 0 {
return int(remainder.Seconds() + expireOffset)
}
}
return expireOffset
}
然后我像这样调用这个函数:
x := getTokenRemainingValidity(claims["exp"])
fmt.Println(x)
其中 claim["exp"] 是我在解析 jwt 令牌后得到的声明。
但这总是给我相同的输出。即3600。如何检查我的令牌的剩余有效性。我正在使用 golang。
【问题讨论】:
-
问一下,你为什么不直接使用 golang jwt 包....
-
您的代码无法编译。
expireOffset必须是一个 int(因为返回),但remainder.Seconds()是一个 float64,所以你不能给它添加一个 int。 expireOffset 的值是多少?还要检查时间戳确实是 float64 而不是数字:golang.org/pkg/encoding/json/#Number
标签: go jwt express-jwt