Emberjs / Chrome / FFox:预检中的数字访问控制请求标头

时间:2016-02-25 09:00:12

标签: javascript django google-chrome ember.js

我正在开发一个应该使用django rest框架后端的Emberjs前端。我刚刚开始使用JWT / Javascript Web令牌进行身份验证。

这就是我所做的:

  • 在后端(目前django的开发服务器出于显而易见的原因)我允许所有来源(因为ember-cli运行在localhost:4200和django at:8000)。即原产地正在被接受。
  • 在Emberjs中正确设置了serverTokenEndpoint
  • 我可以手动添加django上的数字标题以供接受,但我不想,除非我知道为什么我应该允许它们。

我现在看到的问题如下:

  • 在Chrome上,对后端的预检OPTIONS请求包含允许标头0到9的请求。
  • 在Firefox上,对后端的预检OPTIONS请求包含允许标头0到4的请求。

后端不允许使用这些标头,我找不到此请求的来源,也不知道它们的含义应该/可能是什么。

同样,这是Firefox的OPTIONS请求的一部分:

Access-Control-Request-Headers: 0,1,2,3,4,content-type

这来自Chrome:

Access-Control-Request-Headers: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, accept, content-type

我的问题:为什么要求包含这些数字标题?它们来自哪里(ember?浏览器本身?)它们是什么意思?而且,理想情况下,我该如何摆脱它们?

1 个答案:

答案 0 :(得分:0)

我弄明白问题是什么。我将ember-simple-auth's readme中使用Oauth2进行身份验证的代码与ember-simple-auth-token's approach混合在一起。

对于Oauth2,自述文件建议将凭证解压缩为两个变量并将其传递给authenticate函数:

let { identification, password } = this.getProperties('identification', 'password');
this.get('session').authenticate('authenticator:oauth2', identification, password).catch((reason) => {
  this.set('errorMessage', reason.error || reason);
});

而令牌版本不解包凭证:

var credentials = this.getProperties('identification', 'password'),
authenticator = 'authenticator:jwt';
this.get('session').authenticate(authenticator, credentials);

事实证明,jwt身份验证器的身份验证功能最多需要三个参数,第三个是头。我混合代码的方式导致我的密码由于某种原因被分解为数值。在我发布的firefox片段中,我使用了不同的密码,这就是为什么值只变为4而不是9。

通过不解包凭证预检成功。