簡體   English   中英

Golang jwt.StandardClaims 時間格式類型問題

[英]Golang jwt.StandardClaims time format type issue

我正在使用這個包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

我讀到,因為我輸入了錯誤的值,但是,在我在網上看到的所有示例中,這正是大多數人設置它的方式。

我仍在學習,所以我不確定將這種時間格式轉換為有效格式的正確方法。

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

你可以試試

你的代碼是好的問題是你的 package 你可以改變導入

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

"github.com/dgrijalva/jwt-go"

好的,你可以改變

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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM