我使用以下命令设置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)
其中claims[“exp”]是我解析一个jwt令牌后得到的声明。但这总是给我相同的输出。即3600
。我如何检查我的令牌的剩余有效性。我正在使用golang。
1条答案
按热度按时间mbskvtky1#
因为类型Assert
timestamp.(float64)
失败,而timestamp
的实际值是int64
,所以总是得到3600(看起来是expireOffset
)。为了使它工作,我添加了
expireOffset
并将其设置为3600。在第一个return语句中,expireOffset
必须转换为float64
,然后将结果转换回int
。这样就可以工作了,尽管我不确定添加或返回的偏移量是什么。完整的工作示例可以在here on the Go Playground中查看和测试。