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

解析 JWT:输入字节 0 处的非法 base64 数据

解析 JWT:输入字节 0 处的非法 base64 数据

Go
小唯快跑啊 2022-10-24 15:31:06
我正在我的网络应用程序上制作身份验证表单。首先,我将表单数据发送到服务器,它生成令牌并将其存储在 localStorage然后,我想从表单页面重定向到主页。这是将令牌发送到服务器的 JavaScript,以便我在主页上被视为授权用户:const xhr = new XMLHttpRequest()xhr.open('GET', '/')xhr.setRequestHeader('Authorization', localStorage.token)xhr.send()xhr.onload  = () => {if(xhr.status >= 400) {    console.log("error")  }}xhr.onerror = () => {    console.log("error")}然后我想检查令牌并显示主页。这是它的 Golang 函数:func (h *Handler) Home_page(c *gin.Context) {header := c.GetHeader("Authorization")    if header != "" {        _, err := h.services.Authorization.ParseToken(header)        if err != nil {            newErrorResponse(c, http.StatusUnauthorized, err.Error())            return        }        c.HTML(            http.StatusOK,            "home_page.gohtml",            gin.H{                "IsAuth": true,            },        )        return    }}ParseToken 函数:func (s *AuthService) ParseToken(accessToken string) (int, error) {    token, err := jwt.ParseWithClaims(accessToken, &tokenClaims{}, func(token *jwt.Token) (interface{}, error) {        if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {            return nil, errors.New("invalid signing method")        }        return []byte(signingKey), nil //signingKey is a string with random elements    })    if err != nil {        return 0, err    }    claims, ok := token.Claims.(*tokenClaims)    if !ok {        return 0, errors.New("token claims are not of type *tokenClaims")    }    return claims.UserId, nil}问题是我收到此错误:ERRO[0001] 输入字节 0 处的 base64 数据非法我已经检查了 jwt.io 上的令牌,它表明令牌已经过验证,可能问题出在我作为令牌传递的字符串类型上。另一个问题是,如果我不检查从令牌验证返回的错误,主页不会显示此错误:http: 恐慌服务 [::1]:50490: 写 tcp [::1]:8083->[::1]:50490: 写: 破管道我是 Golang 的新手,一直在努力解决这个问题,尽管它看起来很典型。对于如何处理令牌或从身份验证表单重定向的任何帮助,我将非常感谢!编辑:我正在使用https://github.com/golang-jwt/jwt/v4
查看完整描述

1 回答

?
米脂

TA贡献1836条经验 获得超3个赞

不知何故,这个问题: 输入字节 0 处的非法 base64 数据

通过更改我存储令牌的方式来解决。我像这样存储在本地存储中:

localStorage.setItem('token', data.token)

我将其更改为下一行,错误消失了:

localStorage.token = data.token

(数据是我的服务器返回的带有令牌的 JSON)

现在,如果我记录令牌的值,它会显示为不带逗号。@Crowman,谢谢你的回答!

编辑:发生了第二个管道损坏问题,因为我没有在客户端等待答案。所以现在我更改了 JS 代码以等待响应,但我仍然在努力解决如何显示我使用 JavaScript 从服务器接收到的 html 页面。


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

添加回答

举报

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