javascript - Emberjs/Chrome/FFox : numeric Access-Control-Request-Headers in preflight

标签 javascript django google-chrome ember.js

我正在开发一个 Emberjs 前端,它应该使用 django Rest 框架后端。我刚刚开始使用 JWT/Javascript Web token 进行身份验证。

这就是我所做的:

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

我现在看到的问题如下:

  • 在 Chrome 上,向后端发出的预检 OPTIONS 请求包括允许 header 0 到 9 的请求。
  • 在 Firefox 上,向后端发送的预检 OPTIONS 请求包括允许使用 header 0 到 4 的请求。

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

这又是来自 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?浏览器本身?)以及它们的含义是什么?理想情况下,我怎样才能摆脱它们?

最佳答案

我知道问题出在哪里了。我混合了 ember-simple-auth's readme 中的代码使用 Oauth2 进行身份验证 ember-simple-auth-token's approach

对于 Oauth2,自述文件建议将凭据解压到两个变量中并将它们传递给身份验证函数:

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

而 token 版本不会解压凭据:

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

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

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

关于javascript - Emberjs/Chrome/FFox : numeric Access-Control-Request-Headers in preflight,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35622578/

相关文章:

javascript - 从 jquery 中的事件中获取 elementId

python - Django ManyToMany 与抽象基础的关系 - 不可能,但有更好的方法吗?

django - 错误: invalid command 'bdist_wheel'

javascript - 如何制作一个 chrome 扩展程序来打开带有多个按钮的弹出菜单,这些按钮可以在新选项卡中打开链接?

html - 嵌套、样式化的跨度在 Chrome/Firefox 中以不同方式呈现 : bug or feature?

javascript - Node.js Web 抓取表,值略有不同

javascript - 将参数传递给 <html :link> from javascript

javascript - 将json转换为其他json结构

django - 静态 CSS 和图像未在 Django 中加载

html - popup.html 上的弯 Angular ?