api - 如何在golang中通过重定向发送cookie?
问题描述
我正在开发一个 api,在对用户进行身份验证后,我想通过一个包含 jwt 令牌的 cookie 将他重定向到主页。
我正在使用该http.Redirect
功能,并且已经尝试过以下方法:
将 cookie 设置为 ResponseWriter 并通过重定向功能发送它,但它所做的只是在身份验证页面上设置一个 cookie,但它没有通过重定向传递它,因此主页没有收到它。
将 cookie 添加到我首先使用处理程序函数收到的请求中,并通过重定向函数重新发送它。这根本行不通。
创建一个新请求并再次通过重定向功能发送它。这也行不通。
那是我与该http.SetCookie
函数一起使用的代码,这是效果最好的代码:
strToken := CreateToken(user)
urlAuthRedirect := "https://komfy.now.sh"
cookie := http.Cookie{
Name: "jwt-token",
Value: strToken,
}
http.SetCookie(resp, &cookie)
http.Redirect(
resp, // ResponseWriter
req, // Request
urlAuthRedirect,
http.StatusSeeOther)
如何将 cookie 从身份验证端点传递到主页?
解决方案
如果设置的 cookie 标头未指定路径,则浏览器默认路径为请求的路径。要使 cookie 在整个站点中可用,请将路径显式设置为“/”。
cookie := http.Cookie{
Name: "jwt-token",
Value: strToken,
Path: "/",
}
Cookies 不能跨域设置。如果问题中的身份验证处理程序不是从域 komfy.now.sh 提供的,则无法直接设置 cookie。解决方法是通过查询参数将令牌发送到目标域上的端点。该端点的处理程序设置 cookie 并可能重定向到最终 URL。