这是我写的代码。当我使用token.Claims
方法时,它返回下面的结果。我需要访问电子邮件值也检查是否谁是用户。当我使用token.Claims.Email
时,它抛出一个错误。
func User(c *fiber.Ctx) error {
cookie := c.Cookies("jwt")
claims := jwt.MapClaims{}
token, _ := jwt.ParseWithClaims(cookie, claims, func(token *jwt.Token) (interface{}, error) {
return []byte(SecretKey), nil
})
return c.JSON(token.Claims)
}
这是邮递员的回应。如何访问以下电子邮件地址
通过检查您的代码,我猜您正在使用这个golang-jwt包。
在调用jwt.ParseWithClaims
之后,您应该能够访问您在代码中已经创建的名为claims
的jwt.MapClaims
对象上的声明。
没有光纤的例子,只有golang-jwt,但逻辑保持不变:
package main
import (
"fmt"
"github.com/golang-jwt/jwt/v4"
)
// Created on https://jwt.io/
const tokenString = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InRlc3RAbWFpbC5jaCJ9.Iv6oZWIX7Rrtag4d6h3-eJ3xdXLwoZ9PbotcvbjOvhI"
// Just as an example, make sure to pick a stronger key
const key = "1234567890"
func main() {
claims := jwt.MapClaims{}
token, err := jwt.ParseWithClaims(tokenString, claims, keyFunc)
if err != nil {
panic(err)
}
fmt.Println(token.Valid)
email, ok := claims["email"].(string)
if !ok {
panic("Couldn't parse email as string")
}
fmt.Println(email)
}
func keyFunc(*jwt.Token) (interface{}, error) {
return []byte(key), nil
}