[英]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.