我的Angular11(http://localhost:4200)现在正在与我的节点API服务器(http://localhost:3000)通信。API服务器在cookie中发送回会话ID,但随后的浏览器对API的请求不附带cookie。
这是节点API在cookie中发回会话ID的方式
res.cookie('sessionID', 123);
F12确认它位于响应标头中,Set-Cookie: sessionID=123; Path=/
Cookie应该是由浏览器自动发送的每个请求。要在节点中读取它:var mysessionid=req.cookie["sessionID"];
已尝试this post和github中提到的选项,但在F12的请求标头中仍然看不到sessionID
:
const httpOptions =
{
headers: new HttpHeaders({'Content-Type': 'application/json', 'Access-Control-Request-Headers': 'content-type'}),
withCredentials: true,
};
this.http.post<any[]>('http://localhost:3000/anywhere', httpOptions, myData).subscribe(...);
以及:
const httpOptions =
{
headers: new HttpHeaders({'Content-Type': 'application/json'}),
withCredentials: true,
'Access-Control-Allow-Headers': 'content-type'
};
我有一个拦截器在Angular ,以确认如果拦截器造成这没有cookie发送,上述网址被排除,这意味着头部没有接触。仍然cookie没有发送到API服务器。
既然cookie应该是自动发送的,我做得对吗?
3条答案
按热度按时间qgelzfjb1#
当我们的节点API返回一个有效的令牌,或者返回一个刷新令牌时,我们手动设置cookie,如下所示,并且循环
axios
http请求定义并更新默认的报头。这强制所有前进的HTTP请求在报头中具有用于前进的HTTP请求的更新令牌当我们的应用程序加载时,我们从头中提取令牌,并在初始加载时将它们设置为axios
包含axios路由定义的http文件示例
忽略es5和es6代码的混合,webpack捆绑它们
vwkv1x7d2#
这可能是因为您在端口4200上运行Angular的开发服务器,而API服务器在另一个端口上运行。
t5zmwmid3#
最后我能够解决它,使他们SSL,花了我一个多星期:(
希望会帮助人前进。
环境:
1.两者都是httpS/SSL。
解决方案:
1.按照this article创建受信任的
.crt
和.key
文件1.我没有将
localhost
添加到hosts
文件。1.添加
proxy.conf.js
(或格式一致的. json文件)并将其包含到angular.json文件中。1.不需要为每个单独的http调用指定
httpOption
。server.js
中。"ssl": true
,这足以通过SSL运行Angular 11):要验证证书是否完全受Chrome信任,请在Chrome中打开一个API URL调用,例如
http://localhost:3001/path1/func/xyz
,您不会看到此消息