我正在使用
设置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)
声明[" exp"]是解析jwt令牌后我得到的声明。
但这总是给我相同的输出。即3600
。如何检查令牌的剩余有效性。我正在使用golang。
答案 0 :(得分:0)
由于类型断言expireOffset
失败,因为timestamp.(float64)
的实际值为timestamp
,所以您总是得到3600(似乎是int64
)。
func getTokenRemainingValidity(timestamp interface{}) int {
var expireOffset = 3600
if validity, ok := timestamp.(int64); ok {
tm := time.Unix(int64(validity), 0)
remainder := tm.Sub(time.Now())
if remainder > 0 {
return int(remainder.Seconds() + float64(expireOffset))
}
}
return expireOffset
}
为使其正常工作,我添加了expireOffset
并将其设置为3600。
在第一个return语句中,必须将expireOffset
转换为float64
,然后将结果转换回int
。
通过这种方式,尽管我不确定您要添加或返回的偏移量。
可以查看并测试完整的示例here on the Go Playground。