Golang jwt.标准索赔时间格式类型问题

nom7f22z  于 2022-12-20  发布在  Go
关注(0)|答案(5)|浏览(249)

我正在使用这个包github.com/dgrijalva/jwt-go/v4在登录函数中设置声明:

now := time.Now()
claims := &jwt.StandardClaims{
    Issuer: "Test",
    ExpiresAt: now.Add(time.Hour * 24).Unix(),
}

IDE一直告诉我:
不能将“now.Add(time.Hour * 24).Unix()”(类型int64)用作类型 Time
我读到这一点是因为我输入了错误的值,然而,在我在网上看到的所有示例中,这正是大多数人设置它的方式。
我还在学习围棋,所以我不确定将这种时间格式转换为有效格式的正确方法。

8qgya5xd

8qgya5xd1#

ExpiresAt要求数据类型为*time.Time,函数Unix()返回int64中以秒为单位的时间。
我建议您使用github.com/golang-jwt/jwt包,而不是您现在使用的包,该包已不再维护。

wb1gzix0

wb1gzix02#

在www.example.com中github.com/golang-jwt/jwt/v4不推荐使用StandardClaims类型,应将StandardClaims替换为RegisteredClaims。
关于Cannot use 'now.Add(time.Hour * 24).Unix()' (type int64) as the type Time.,您需要使用NumericDate类型,因此您的代码将如下所示:

claims := &jwt.RegisteredClaims{
    Issuer: "Test",
    ExpiresAt: &jwt.NumericDate{now.Add(time.Hour * 24)},
}
ubbxdtey

ubbxdtey3#

func GenerateToken(username, password string) (string, error) {
    nowTime := time.Now()
    expireTime := nowTime.Add(12 * time.Hour)

    claims := Claims{
        username,
        password,
        jwt.RegisteredClaims{
            ExpiresAt: jwt.NewNumericDate(expireTime),
            Issuer:    "test",
        },
    }
    
    tokenClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    token, err := tokenClaims.SignedString(jwtSecret)

    return token, err
}

你可以试试

ni65a41a

ni65a41a4#

你的代码是好的问题是与你的包的导入你可以改变导入

"github.com/dgrijalva/jwt-go/v4"

"github.com/dgrijalva/jwt-go"
f45qwnt8

f45qwnt85#

好吧,你可以换了

github.com/dgrijalva/jwt-go/v4 => github.com/golang-jwt/jwt/v4   //v4.4.3

StandardClaims => RegisteredClaims

now.Add(time.Hour * 24).Unix()  => jwt.NewNumericDate(now.Add(time.Hour * 24))

相关问题