使用 Angular 4.3 保存会话 cookie

Posted

技术标签:

【中文标题】使用 Angular 4.3 保存会话 cookie【英文标题】:Keeping session cookie with angular 4.3 【发布时间】:2018-01-24 02:16:59 【问题描述】:

我正在尝试对 Spring Boot 后端进行身份验证并获取一些数据

this.http.get(`$this.configService.apiuser`, 
        headers: new HttpHeaders().set('Authorization', "Basic " + btoa(user.login + ":" + user.password)),
      ).toPromise().then(resp => 
        this.http.get(`$this.configService.apiprojects`).toPromise();

身份验证工作正常。这是响应头:

HTTP/1.1 200
访问控制允许来源:http://localhost:4200
变化:起源
访问控制允许凭据:true
X-Content-Type-Options: nosniff
X-XSS-防护:1;模式=块
缓存控制:无缓存,无存储,最大年龄=0,必须重新验证
Pragma:无缓存
过期:0
X-Frame-选项:拒绝
设置 Cookie:JSESSIONID=5C698E29D0DD942ED36AF2D93287B03B;路径=/; HttpOnly
内容类型:application/json;charset=UTF-8
传输编码:分块
日期:格林威治标准时间 2017 年 8 月 16 日星期三 04:02:42

然后我尝试从 spring boot 中获取项目。这是我的 HTTP GET 的标头:

GET /user HTTP/1.1
主机:本地主机:8080
连接:保持活动
接受:应用程序/json、文本/纯文本、*/*
来源:http://localhost:4200
授权:基本 dXNlcjpwYXNzd29yZA==
用户代理:Mozilla/5.0 ...
DNT: 1
引用者:http://localhost:4200/auth
接受编码:gzip、deflate、br
接受语言:en-US,en;q=0.8,fr;q=0.6

它不使用会话 cookie,所以它会抛出一个错误,说没有识别。

如何使用 Angular 4.3 解决此问题?

【问题讨论】:

【参考方案1】:

在 Angular 版本中 >= 4.3

如果您在 Angular 4.3 中使用新的HttpClient 模块,您是否尝试在第二个(选项)参数中将withCredentials 设置为true

constructor(private http: HttpClient) 

  this.http.get('/my/resource/url', withCredentials: true)
    .subscribe(result => 
      ...
    );


来源:https://angular.io/api/common/http/HttpClient#get

【讨论】:

我相信你的意思是说withCredentials,而不是useCredentials

以上是关于使用 Angular 4.3 保存会话 cookie的主要内容,如果未能解决你的问题,请参考以下文章

Angular.js 的 Node.js CORS 会话 cookie

如何使用 Apache HttpClient 4.3 处理 Cookie

将 JWT 存储在基于会话的 cookie Angular 6 中

使用 Angular 4 保存 cookie

使用cookie保存会话数据

Flask - 像使用 cookie 一样将会话数据保存在数据库中