2

我正在使用设置 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。

4

1 回答 1

0

您总是得到 3600 (这似乎是expireOffset),因为类型断言timestamp.(float64)失败,因为实际值为timestampis 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。这样它就可以工作,尽管我不确定您添加或返回偏移量的内容。

可以在 Go Playground 上查看和测试完整的工作示例 。

于 2019-07-21T21:37:45.313 回答