Golang jwt.StandardClaims 时间格式类型问题

我正在使用这个包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()' (type int64) 作为Time类型。


我读到,因为我输入了错误的值,但是,在我在网上看到的所有示例中,这正是大多数人设置它的方式。


我仍在学习 Go,因此我不确定将这种时间格式转换为有效格式的正确方法。


小唯快跑啊
浏览 391回答 4
4回答

慕尼黑的夜晚无繁华

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

四季花海

在 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)},}

largeQ

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}

jeck猫

你的代码是好的问题是你的包的导入你可以改变导入从"github.com/dgrijalva/jwt-go/v4"至"github.com/dgrijalva/jwt-go"
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go