gpt4 book ai didi

go - 如何检查 JWT token 剩余有效期 golang

转载 作者:IT王子 更新时间:2023-10-29 02:22:51 28 4
gpt4 key购买 nike

我正在使用

设置 JWT token 声明的到期时间
claims["exp"] = time.Now().Add(time.Hour * time.Duration(settings.Get().JWTExpiration)).Unix()

其中 settings.Get().JWTExpiration 为我提供了我在应用程序设置文件中所做的设置。

我已经编写了一个函数,理想情况下应该会给出 token 有效的剩余时间。

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 token 后得到的声明。但这总是给我相同的输出。即 3600。如何检查我的 token 的剩余有效性。我正在使用 golang。

最佳答案

你总是得到 3600(这似乎是 expireOffset),因为类型断言 timestamp.(float64) 失败,因为 timestamp< 的实际值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 .

关于go - 如何检查 JWT token 剩余有效期 golang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39119910/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com