问题描述
Javascript是否可以访问从另一个域创建的cookie?
请阅读整个问题,因为我确定它涵盖了基本建议。
我的项目配置设置如下:
域:
front-end: "https://front.domainA.com" // AWS Amplify,React
back-end: "https://back.domainB.com" // AWS Amplify,Express.js
CORS(在server.js上):
origin: "https://front.domainA.com",credentials: true,optionsSuccessstatus: 200,
CORS(Amplify API控制台,在server.js CORS之前先达到此)
"method.response.header.Access-Control-Allow-Methods": "'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'","method.response.header.Access-Control-Allow-Headers": "'X-Requested-With,X-HTTP-Method-Override,Accept,Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,csrf-token,x-csrf-token,xsrf-token,x-xsrf-token'","method.response.header.Access-Control-Allow-Origin": "'https://front.domainA.com'","method.response.header.Access-Control-Expose-Headers": "'Set-Cookie'","method.response.header.Access-Control-Allow-Credentials": "'true'"
Axios
const instance = axios.create({
baseURL: "https://back.domainB.com";
});
instance.interceptors.request.use((req) => {
req.withCredentials = true;
return req;
});
export default instance;
请注意,我已经测试了在本地主机端口(前端:3000,后端:5000)之间共享cookie的问题。
更多详细信息:
调用我的cookie GET端点时,该cookie将通过“ Set-Cookie”响应标头发送回前端。但是从那里我无法获取Javascript来读取Cookie,然后我要在前端对其进行操作。
在建议您设置cookie属性之前,,我已经介绍了每个角度。我已经在每种可能的配置中都设置了cookie的域,sameSite,httpOnly,secure和path属性,但没有结果。也就是说,该示例的正确设置似乎是:
httpOnly=false
path="/"
sameSite="none"
secure=true
如果我在下面包含域设置,则会收到一条错误消息,提示:“ Set-Cookie被阻止,因为它的Domain属性对于当前主机URL无效”。因此,我将其省略。其他所有设置均为默认设置。
domain='https://front.domainA.com'
总而言之,cookie实际上已被Chrome确认。如果单击浏览器栏左侧的lock (or i),icon to the left of the address bar锁(或i)图标,它们将显示在此处。它们还会显示在http响应标头中。但是它们不会显示在cookie存储中,并且不会被Javascript读取。
我的想法是,对此的唯一解决方案是将后端和前端都放在同一顶级域上。也许后端位于api.xxxx子域。
我可以接受我的假设吗?还是对我缺少的这个问题有其他解决方案?也许我缺少AWS Amplify设置来允许此设置?
提前感谢您的任何答复。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)