我正在我的網路應用程式上制作身份驗證表單。
首先,我將表單資料發送到服務器,它生成令牌并將其存盤在 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
uj5u.com熱心網友回復:
不知何故,這個問題: 輸入位元組 0 處的非法 base64 資料
通過更改我存盤令牌的方式來解決。我像這樣存盤在本地存盤中:
localStorage.setItem('token', data.token)
我將其更改為下一行,錯誤消失了:
localStorage.token = data.token
(資料是我的服務器回傳的帶有令牌的 JSON)
現在,如果我記錄令牌的值,它會顯示為不帶逗號。@Crowman,謝謝你的回答!
編輯:發生了第二個管道損壞問題,因為我沒有在客戶端等待答案。所以現在我更改了 JS 代碼以等待回應,但我仍然在努力解決如何顯示我使用 JavaScript 從服務器接收到的 html 頁面。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/408728.html
標籤:
上一篇:始終使用舊令牌值進行身份驗證
