我已经为我的Go Web服务器切换了身份验证,从承载令牌传递到cookie。我已经做了这样的事情,当用户登录时,我为令牌和刷新令牌设置了一个cookie,就像这样:
a.AuthRepo.StoreInCookie(res.Token, "token", c)
a.AuthRepo.StoreInCookie(res.RefreshToken, "refreshToken", c)
其中StoreInCookie函数为:
func (a AuthRepository) StoreInCookie(value, cookieName string, c *gin.Context) {
c.SetCookie(cookieName, value, 0, "/", "", os.Getenv("ENVIRONMENT") == "prod", false)
}
当我从nextjs应用程序登录并获取用户详细信息时,它工作得很好。用户API具有检查令牌是否存在的中间件,否则返回401。中间件是这样开始的:
cookie, err := c.Cookie("token")
if err != nil {
c.AbortWithStatus(http.StatusUnauthorized)
return
}
token, err := utils.ParseJwt(cookie)
if err != nil {
c.AbortWithStatus(http.StatusUnauthorized)
return
}
在用户获取之后,我重新加载页面以重新获取一个列表(一个可以获取或不经过身份验证的项目列表,当你是btw时,你会看到更多的信息),但在那个调用中,cookie不存在,中间件也找不到它,即使之前的调用进行得很顺利,cookie存在,并且通过开发工具我可以在请求中看到令牌:
我错过了什么?
编辑:我知道只有从客户端组件中,才能从Web服务器中正确地找到cookie。我真的不明白为什么
1条答案
按热度按时间7eumitmz1#
找到解决方案要感谢之前关于stackoverflow的一篇文章。如果我从服务器组件获取,我需要手动设置头中的cookie。For more info check the previous resolved question