我正在为 todolist 应用程序开发 REST API(不是来自教程),并且我已经成功实现了身份验证,但是我的一个辅助函数似乎无法读取明显存在的 cookie,这里是函数:
// jwt is imported from the https://github.com/dgrijalva/jwt-go package
func validateAccessToken(w http.ResponseWriter, r *http.Request) uuid.UUID {
jwtSecret, exists := os.LookupEnv("JWT_SECRET")
if !exists {
w.WriteHeader(500)
w.Write([]byte(`{"message":{"error":"Fatal internal error occurred"}}`))
panic(errors.New("JWT_SECRET environment variable not set"))
}
// Get access token and then validate it
at, err := r.Cookie("access_token")
if err == http.ErrNoCookie {
w.WriteHeader(401)
w.Write([]byte(`{"message":{"error":"access_token cookie not found"}}`)) // this error is always returned when i attempt to use the handler that uses this function
return uuid.Nil
}
t := at.Value
token, err := jwt.ParseWithClaims(t, &models.UserClaims{}, func(token *jwt.Token) (interface{}, error) {
return []byte(jwtSecret), nil
})
if claims, ok := token.Claims.(*models.UserClaims); ok && token.Valid {
return claims.ID
}
w.WriteHeader(401)
w.Write([]byte(`{"message":{"error":"access_token invalid"}}`))
return uuid.Nil
}
这是设置cookie的代码的相关部分:
// Login handles the login route
func Login(w http.ResponseWriter, r *http.Request) {
//...
// Construct cookies and then set them
rtCookie := http.Cookie{
Name: "refresh_token",
Value: *rt,
Expires: time.Now().Add(time.Nanosecond * time.Duration(sessionLifeNanos)),
}
atCookie := http.Cookie{
Name: "access_token",
Value: *at,
Expires: time.Now().Add(time.Minute * 15),
}
http.SetCookie(w, &rtCookie)
http.SetCookie(w, &atCookie)
w.Write([]byte(`{"message":"Logged in successfully :)"}`))
}
此外,每当我在邮递员中使用登录路由后进行检查时,所有 cookie 都会发送到 cookie jar 中(并且没有“access_token”cookie 未过期),并且具有正确的外观值。我很困惑为什么该validateAccessToken()函数找不到那里的cookie,这里也是serve()调用的函数main():
我非常感谢任何帮助的尝试,我也为这个糟糕的问题道歉,我有点急于完成这个。
白板的微信
LEATH
杨魅力
随时随地看视频慕课网APP
相关分类