我正在我的应用程序中进行用户身份验证,这是通过 jwt 保存的 cookie 完成的,当我发出请求时,客户端获取 cookie 没有问题,但是当客户端更新页面或仅 f5 时,cookie 被删除,我正在调查它是否发生在本地主机上或我的代码中是否存在问题,但我没有找到与我的问题相关的任何内容。这是我在 Go 中的代码:
func Login(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
u := model.User{}
if err := json.NewDecoder(r.Body).Decode(&u); err != nil {
http.Error(w, "format incorrect", http.StatusBadRequest)
return
}
user, equals, err := u.AccessControll(u.Email, u.Password)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
if !equals {
http.Error(w, "ups", http.StatusBadRequest)
return
}
token, err := jwt.CreateToken(user)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
cookie := http.Cookie{
Name: "token",
Value: token,
Expires: time.Now().Add(5 * time.Minute),
HttpOnly: true,
}
http.SetCookie(w, &cookie)
}
Run Code Online (Sandbox Code Playgroud)
浏览器默认 cookie 路径为请求路径。如果 cookie 路径不是请求路径的路径前缀,则浏览器不会发送 cookie。问题中的 cookie 仅针对对登录处理程序路径及其下方路径的请求设置。
将 cookie 路径设置为“/”以使 cookie 可用于所有路径。
这可能是无关的,但最好设置 MaxAge 而不是 Expires,因为 MaxAge 不受时钟偏差的影响。
cookie := http.Cookie{
Name: "token",
Value: token,
Path: "/",
MaxAge: 5 * 60,
HttpOnly: true,
}
Run Code Online (Sandbox Code Playgroud)