为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
小唯快跑啊 2022-11-08 15:59:47
我正在使用这个包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,因此我不确定将这种时间格式转换为有效格式的正确方法。
查看完整描述

4 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

ExpiresAt要求数据类型为*time.Time,并且函数Unix()以秒为单位返回时间int64

我建议您使用该软件包github.com/golang-jwt/jwt而不是您现在使用的软件包,该软件包已不再维护。


查看完整回答
反对 回复 2022-11-08
?
四季花海

TA贡献1811条经验 获得超5个赞

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

}


查看完整回答
反对 回复 2022-11-08
?
largeQ

TA贡献2039条经验 获得超7个赞

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

}


查看完整回答
反对 回复 2022-11-08
?
jeck猫

TA贡献1909条经验 获得超7个赞

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

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

"github.com/dgrijalva/jwt-go"


查看完整回答
反对 回复 2022-11-08
  • 4 回答
  • 0 关注
  • 390 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信