【问题标题】:CORS cookies work with get request but not with post in Angular2CORS cookie 适用于获取请求,但不适用于 Angular2 中的帖子
【发布时间】:2017-04-16 02:39:51
【问题描述】:

我正在尝试将 angular2 应用程序与 rails api 连接。

为了使用 rails 身份验证,我希望能够在两个域之间共享 cookie。当我在我的 Angular 应用程序中调用 http GET 时,我会按预期返回带有设置的 cookie 字段的响应,并且当我发送下一个 GET 请求时,cookie 会随之发送。但是,当我用 POST 替换第二个 GET 时,它不是。我对两个调用都使用 withCredentials = true 。

当我调用以下命令时:

let options : RequestOptionsArgs = {};
options.withCredentials = true;
this.http.get(this.baseUrl + 'sessions/login_attempt' ,options)
  .toPromise();

我可以在 chrome 开发工具中看到发送 cookie 的请求标头:

Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:sv-SE,sv;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Cookie:request_method=GET; _commandsapp_session=SlRJdHdPQ3dadG94RDFWYmIxVWNnZnZUMzRwSU5pMjhoQ1NWV1loN2lNWUdIMTFrNmZyV2dJcWV4RHZON0p6WTJRcVRNSU8zM3BXV0dIWnJ4QXpYaEdSYUVLR1cvT3N6Wm1XNWxUVDJ6c3ltbll1dk9OSFdJdDZIdW5SM25BYTdOSGtwelhGU0NDRG1WZXQwSzlHZCt3PT0tLWwrc1BrWVA5Tk84ZEU4VE8zcUQ4L0E9PQ%3D%3D--f201c0d6e0fe67de323a10fb521614d165a50964
Host:0.0.0.0:3000
Origin:http://127.0.0.1:4200
Referer:http://127.0.0.1:4200/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36

但是,当我用 post 替换它并添加正文时,我看不到 chrome 正在发送 cookie。

let options : RequestOptionsArgs = {};
    options.withCredentials = true;
    this.http.post(this.baseUrl + 'sessions/login_attempt', {'username_or_email': 'admin', 'login_password':'password'} ,options)
      .toPromise();

chrome 开发工具中的请求标头:

Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:sv-SE,sv;q=0.8,en-US;q=0.6,en;q=0.4
Access-Control-Request-Headers:content-type
Access-Control-Request-Method:POST
Connection:keep-alive
Host:0.0.0.0:3000
Origin:http://127.0.0.1:4200
Referer:http://127.0.0.1:4200/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36

【问题讨论】:

    标签: javascript http angular cookies cors


    【解决方案1】:

    第二个请求是pre-flight OPTIONS request,在浏览器发出 POST 请求(包括 cookie)之前,您必须响应它并获得发出 POST 请求的权限。

    【讨论】:

      猜你喜欢
      • 2018-08-10
      • 2020-11-23
      • 1970-01-01
      • 2014-09-05
      • 2013-03-15
      • 1970-01-01
      • 2019-06-05
      • 2022-01-21
      • 2020-06-13
      相关资源
      最近更新 更多