gpt4 book ai didi

go - 解析字符串和子字符串

转载 作者:数据小太阳 更新时间:2023-10-29 03:25:24 26 4
gpt4 key购买 nike

我正在尝试解码(而不是验证)JWT token 并从其正文中读取值。我的这部分代码还处理非 JWT token 。所以我需要处理普通 token (比如一些字符串)和 JWT token 。

为了实现这一点,我将标记与“.”分开。读取 JWT 正文值,但是当我获得非 JWT token (没有'.'s)时,问题是“索引超出范围”

Go Playground code

package main

import (
"fmt"
"strings"
"encoding/base64"
"encoding/json"
)

func main() {
token := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ"
//nonJwtToken := "xxxxxxx"

// below line should gracefull throw error if it passed nonJwtToken
data, err := base64.RawURLEncoding.DecodeString(strings.Trim(strings.Split(token, ".")[1], "."))
if err !=nil {
fmt.Printf("error rahu : " , err)

}

var result map[string]interface{}
err = json.Unmarshal(data, &result)
fmt.Println(result["name"])
fmt.Println(err)

}

请注意,我并不是要验证 JWT,我所做的只是解码 JWT 并从中读取值。

如有任何建议,我们将不胜感激。

最佳答案

正如@RayfenWindspear 在评论中提到的,您应该检查Split 返回的 slice 的长度,您也不需要Trim "."来自一个字符串,该字符串是对“.”进行拆分的结果。因为结果中省略了点。

ts := strings.Split(token, ".")
if len(ts) <= 1 {
return ErrNonJWTToken
}
data, err := base64.RawURLEncoding.DecodeString(ts[1])

https://play.golang.org/p/NPw7dnBTsh

关于go - 解析字符串和子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43400541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com