背景:

 github.com/golang-jwt/jwt/v5

遇到的问题

1、api存在跨域问题 2、在后端给浏览器设置Cookie的时候,api能够成功返回Cookie(在Response header中可以查看到Set-Cookie的值),但是却无法在浏览器本地的Cookies中找到记录

image.png 然后导致我在之后的请求中,浏览器无法携带Cookie进行自动鉴权,刷新token(到期需要refresh)等逻辑。

如何解决:

首先是排查问题的过程,借助浏览器的开发者工具提示,以及后端报错日志定位问题:“因为跨域问题,无法成功发送cookie/保存cookie”;接着上StackOverflow查看类似的解决方案,由于我前端使用的是fetch请求,通过设置credentials:inclue 来保证cookie在跨域的情况下能够被传递

image.png

并且处理了后端跨域请求的逻辑,原本我后端的跨域请求逻辑如下:

image.png 如此设置,浏览器会提醒我Accsee-Control-Allow-Origin : * 不能够和credentials:inclue 一起使用,于是我做了如下更改,改成特定的url,并设置允许跨越的Credentials

image.png api跨域报错问题解决

继续借助开发者工具查看成功的api,进入Cookies关键字中,关注到里面关于SameSite的提示

image.png 提示表面:set-cookie默认的SameSite是Lax模式,并不支持跨域,如果想要支持跨域,请将其设置为None模式,我照着提示做了

image.png

然后浏览器又提示

image.png

说cookie依旧被阻塞了,应为我虽然设置了None模式的SameSite,但是没有设置Secure属性 于是我将Secure设置为true,保证操作是安全的

image.png

最终问题得到解决,成功将token设置到浏览器的Cookies中

image.png

总结:

在跨域过程中,浏览器默认是不允许携带Cookie和保存Cookie的,在不仅需要解决浏览器请求跨域问题,还需要注意Cookie在设置的时候也存在这跨域问题

ps:

第一次记录自己排查问题的过程,全程用了1个多小时(菜鸡努力中(ง •_•)ง)