前后端分离项目,前端javascript怎么解析出jwt-token中的username?

下面是后端用于生成jwt-token的函数(golang写的),会返回jwt-token给前端,里面包含username:

// Sign signs the context with the specified secret.
func Sign(ctx *gin.Context, c Context, secret string) (tokenString string, err error) {
    // Load the jwt secret from the Gin config if the secret isn't specified.
    if secret == "" {
        secret = viper.GetString("jwt_secret")
    }
    // The token content.
    token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
        "id":       c.ID,
        "username": c.Username,
        "nbf":      time.Now().Unix(),
        "iat":      time.Now().Unix(),
    })
    // Sign the token with the specified secret.
    tokenString, err = token.SignedString([]byte(secret))

    return
}

问题:
前端javascript接收到jwt-token,怎么解析出jwt-token中的username?

阅读 13.2k
5 个回答

jwt生成的字符串由JWT头、有效载荷和签名几个部分组成,然后编码处理后得到的,,你要解析,首先得解码啊。
关键这个字符串一般用于后端的权限验证,后端可能还会加墨处理,前端需要数据,再封装一个接口即可。
需要username,直接让多个后端返回就可以了啊

根据规范。
jwt由3部分数据组成,各部分通过base64加密后用 . 连接构成鉴权字符串。其中 payload 在第二部分。也就是说,通过字符串 . 分割后 再base64解码即刻拿到payload。

最后 ,你贴出的代码只涉及到了第三部分的计算,其他部分并没有体现出来。

专门写个获取用户数据的接口吧
jwt暴露的信息越少越好。毕竟是只是base64编码的字符串而已
存个id已经够了

这个思路是有问题的。

你在使用ID作为用户的唯一识别字段的情况下,token中放username的意义何在?

你需要username,那么应该是后端在返回token的同时一并返回username,而不是想着把username存到token里前端拿到token后解析其中的信息。

token传给前端从来都不会指望前端来解析后获取些什么。

token对于前端的意义仅限于登录成功后本地存储,之后每次请求都带上。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题