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

golang jwt.MapClaims 获取用户ID

golang jwt.MapClaims 获取用户ID

Go
一只甜甜圈 2022-12-26 10:27:37
设置后,一个简单的有很多关联,其中用户 has_many posts 创建一个带有用户 ID 的帖子似乎有必要解析 jwt Claims 以获取 userID 并将其放置在帖子创建中。那么,如何从 jwt Claims 获取用户 ID我尝试解析令牌但只是出现map[email:teste@teste.com exp:1.655701949e+09 username:teste]tokenString := c.GetHeader("Authorization")    //claims := jwt.MapClaims{}token, err := jwt.ParseWithClaims(tokenString, claims, func(token *jwt.Token) (interface{}, error) {    return []byte("supersecretkey"), nil})if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {    fmt.Printf("%v", claims )} else {    fmt.Println(err)}
查看完整描述

1 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

我从一开始就告诉过你,当你想生成 JWT 时,请执行以下操作:


token := jwt.New(jwt.SigningMethodHS256)

// Set claims

// This is the information which frontend can use

// The backend can also decode the token and get admin etc.

claims := token.Claims.(jwt.MapClaims)

claims["username"] = ID

accessTokenExpireTime := time.Now().Add(time.Hour * 48).Unix()

claims["exp"] = accessTokenExpireTime

// Generate encoded token and send it as response.

// The signing string should be secret (a generated UUID works too)

t, err := token.SignedString([]byte("AccessToken"))

然后当你想解码用户名时,请执行以下操作:


type MyCustomClaims struct {

        Username string `json:"username"`

        jwt.StandardClaims

    }


    auth := c.Request.Header.Get("Authorization")

    if auth == "" {

        c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"Message": "Authorization Header Not Found"})

        return

    }

    splitToken := strings.Split(auth, "Bearer ")

    auth = splitToken[1]


    token, err := jwt.ParseWithClaims(auth, &MyCustomClaims{}, func(token *jwt.Token) (interface{}, error) {

        return []byte("AccessToken"), nil

    })


    if err != nil {

        c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"Message": "Token is wrong or Expire"})

        return

    }



    if claims, ok := token.Claims.(*MyCustomClaims); ok && token.Valid {

        log.Printf("%v %v", claims.Username, claims.StandardClaims.ExpiresAt)

    }


查看完整回答
反对 回复 2022-12-26
  • 1 回答
  • 0 关注
  • 285 浏览
慕课专栏
更多

添加回答

举报

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