使用Aurelia和Electron在获取请求中发送Cookie

时间:2016-08-10 11:58:07

标签: cookies electron aurelia

目标

我必须通过Aurelia客户端访问远程网站。当用Electron包裹时,解决方案也应该有效。请求通过 http.fetch()完成。此请求必须使用客户端设置的不同cookie多次完成。

问题

设置cookie的各种尝试都失败了。它必须由客户端内的某个安全层引起。使用相同的机制设置其他标头可以正常工作。

如果请求中未指定cookie标头,则服务将返回 Set-Cookie 标头,该标头在内部正确处理。后续请求将按预期发送收到的cookie,直到重新启动Electron客户端。此行为适用于大多数客户端,但不是我针对特定问题所需的行为。

尝试解决方案

据我所知,至少在三种不同的环境中会出现同样的问题:

  1. 电子
  2. 火狐/ Iceweasel
  3. Chromium(chromium --disable-web-security --user-data-dir
  4. 我通过Apache Web服务器直接将index.html作为“file://”以及“http://”运行。访问的服务URL始终指向Internet中的相同服务。

    Aurelia view-model(overview.js)

    import {inject} from 'aurelia-framework';
    import {HttpClient} from 'aurelia-fetch-client';
    import 'fetch';
    
    @inject(HttpClient)
    export class Overview {
    
      constructor(http) {
        http.configure(config => {
          config
            .useStandardConfiguration()
            .withBaseUrl(this.url)
            .withDefaults({
                credentials: 'include',
                mode: 'cors',
                // Default headers
                headers: {
                  'X-fetch-default-header': 'fetch-default-header', 
                  'Cookie': 'fetch-default-cookie=test'
                }
            });
        });
        this.http = http;
      }
    
      fetchRoot(nodeId){
        var myHeaders = new Headers();
        myHeaders.append('X-my-header', 'my-header');
        myHeaders.append('Cookie', 'header-cookie=test');
    
        // Individual Headers Variant 1
        this.http.fetch('', 
          {credentials: 'include', headers: { 
              cookie: 'fetch-inline-cookie=test', 
              'X-fetch-inline-header':'fetch-inline-header' 
            }
        }).then(...);
    
        // Individual Headers Variant 2
        this.http.fetch('', 
          {credentials: 'include', headers: myHeaders})
          .then(...);
    
    }
    

    或者,相同的代码已经过; path=/后面的额外key=value测试。

    电子饼干

    使用包electron-cookies,可以访问和操作 document.cookie 属性。设置的值在客户端重新启动时甚至是持久的。的问题:

    1. Cookie未添加到请求中
    2. 浏览器不支持
    3. require
    4. 添加路径(无关,但令人困惑)
    5. 时,cookie解析器似乎有问题

      fetchRoot(nodeId){}扩展了以下代码:

      require('electron-cookies')
      document.cookie = 'document-cookie=test';
      

      其他包

      尝试使用其他软件包(例如,不同的electron-cookies和简单的装饰器fetch-cookie)似乎遇到了同样的安全问题。在某些时候,不会为cookie执行“set header”。

0 个答案:

没有答案