如何从HTTP标头请求中获取set-cookie并将其发送到另一个API angular

问题描述

在我的角度项目中,我有一个基本的登录页面,用户在其中输入他们的电子邮件和密码,并在提交时将电子邮件和密码发送到服务器,并收到包含setcookie的响应,该响应必须在下一页中使用,是双重身份验证。 我想在另一个API调用中使用该cookie(用于双重身份验证),但是我不知道如何。

这是我的userLogin API调用:

userLogin(formdata: Login ): Observable<any> {
    return this.http.post
    (this.ServerUrl + 'Account/login',formdata,{ headers: new HttpHeaders({'accept': 'text/plain','Content-Type': 'application/json','Authorization': 'Bearer ' + this.token,}),observe: 'response',withCredentials: true });
  }

这是我从服务器获得的响应cookie: Cookies

这是我的user2fa API调用:

 user2Fa(formdata: Factor ): Observable<any> {
    return this.http.post
    (this.ServerUrl + 'Account/twoFactorLogin',withCredentials: true });
  }

解决方法

您无法从Angular代码访问cookie,是吗?过去我曾遇到过类似的问题,但是我不需要对代码进行任何更改。我必须进行一些特定于环境的更改。

我不知道您使用的确切环境,但是以下几点可能会帮助您找到解决方案:

  1. 登录REST API调用和后续的REST API调用(如果它们是在同一个服务器/ URL域中进行的),则cookie应与浏览器在后续请求中的请求一起自动发送。
  2. 从登录REST API的响应中检查响应的标题标签。 set-cookie条目是否具有名为“ HttpOnly”的属性?如果是这种情况,我怀疑是否可以通过javascript代码访问cookie。
  3. 如果没有2是否适用,您的Angular应用程序是否在HTTP上运行,而REST API是否在HTTPS上运行?如果是这样,除非您的Angular应用程序在HTTPS上运行,否则您的浏览器将不会在后续请求中发回接收到的cookie。在这种情况下,您可能需要使用自签名证书才能在本地主机上的HTTPS上运行Angular应用程序进行测试。

此外,我建议您测试运行Angular应用程序的当前设置,并检查是否看到相同的行为。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...