我花了很多时间试图解决这个问题。
我的后端是带有 devise_token_auth 的 Rails 4.x
要在登录后授权请求,我需要为每个请求发送多个 header ,如下所示(已使用curl验证):
curl -X GET -H "Content-Type: application/vnd.api+json" -H "Access-Token: 33YPWz2Kr4eMimYjblDg7w" -H "Client: godv0EDuuc-2qZ6kvrVLzQ" -H "Token-Type: Bearer" -H "Accept: application/vnd.api+json" -H "Uid: <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b8ddc0d9d5c8d4ddf8dfd5d9d1d496dbd7d5" rel="noreferrer noopener nofollow">[email protected]</a>" -H "Expiry: 1459295877" -H "Provider: Email" "http://localhost:3000/api/v1/forms"
我完全不知道授权 API 的实际工作原理。我不明白如何在 DeviseAuthorizer#authorize 方法中设置多个请求 header 。
如果有人知道如何做到这一点并且可以回答这个问题,我将立即打开一个拉取请求来修复该区域的 Ember Simple Auth 文档。
最佳答案
设备授权者将一个函数作为第二个参数传递给#authorize。
http://ember-simple-auth.com/api/classes/BaseAuthorizer.html#method_authorize
authorize(data, block(headerName,headerContent))
参数
数据:对象 session 当前保存的数据
block (标题名称,标题内容):函数 使用授权数据调用的回调;将接收 header 名称和 header 内容作为参数
如果您想添加自己的 header ,您可以创建从设备授权者扩展的授权者类。然后重写授权方法,如下所示:
import Ember from 'ember';
import Devise from 'ember-simple-auth/authorizers/devise';
export default Devise.extend({
authorize(data, header) {
this._super(data, header);
header('X-Custom-Header', "The custom 1 header");
header('X-Other-Custom-Header', "The custom 2 header");
}
});
这是有效的,因为在数据适配器 mixin 中,它传递了这个函数:
this.get('session').authorize(authorizer, (headerName, headerValue) => {
xhr.setRequestHeader(headerName, headerValue);
});
关于ember-simple-auth - Ember简单验证: How to set/send multiple request headers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36025206/