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

这是我所做的:


在后端(出于显而易见的原因,目前为django的开发服务器)上,我允许所有起源(因为ember-cli在localhost:4200和django在: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-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身份验证器的authenticate函数最多包含三个参数,第三个是标头。由于某种原因,我混合代码的方式导致密码分解为数字值。在我发布的Firefox片段中,我使用了不同的密码,这就是为什么值仅输入4而不是9的原因。

通过不解压缩凭据,预检成功。

关于javascript - Emberjs/Chrome/FFox:预检中的数字式Access-Control-Request-Header,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35622578/

10-12 12:25