【问题标题】:Ember.js RESTAdapter: Access JSON params when setting headersEmber.js RESTAdapter:设置标头时访问 JSON 参数
【发布时间】:2015-09-08 16:21:03
【问题描述】:

我使用的 API 需要 Authorization 标头内的参数的 HMAC sha256 哈希。

例如,这些可能是参数:

{ "book": { "title": "Test title", "author": "Test author" } }

我的问题是在设置标题时我无法弄清楚如何访问这些参数。

export default DS.RESTAdapter.extend({
    host: 'http://myapi',
    namespace: 'v1',
    shouldReloadAll() { return true; },
    shouldBackgroundReloadRecord() { return true; },
    headers: function() {
        var params = 'PLACE THE PARAMS HERE';
        var hmacString = CryptoJS.HmacSHA256('string', params).toString(CryptoJS.enc.Hex);
        return {
            Authorization: hmacString
        }
    }.property("Authorization")
});

上面的代码可以运行,但是我需要用 JSON 格式的实际参数替换 params 变量(如上)。

如何做到这一点?

【问题讨论】:

  • 如果您不写如何获取实际参数,我们怎么知道该怎么做?
  • @DanielKmak 这正是我要问的问题。我不知道如何获得参数。我知道您可以使用ajaxOptions: function(url, type, hash) { this._super(url, type, hash).data } 获取参数,但这在headers 函数中不起作用。有什么想法吗?
  • 不,我问的是,你从哪里得到这个:{ "book": { "title": "Test title", "author": "Test author" } },例如,你是通过 ajax 得到的吗?
  • 这些参数是 DS.RESTAdapter 发送到 API 服务器的示例,正​​如在其他地方的模型中定义的那样。如果您在ajaxOptions 中调用this._super(url, type, hash).data,它们也会出现。

标签: javascript jquery json ember.js ember-data


【解决方案1】:

我假设您要根据查询参数构建动态标头。

我认为您无法从headers 属性中获取任何查询参数,您可能想尝试通过覆盖find* 函数来构造header

【讨论】:

    【解决方案2】:

    我认为在 Ember Data 中没有本地方法可以做到这一点。您的参数哈希是序列化程序应该处理的数据。但是适配器不应该关心数据,所以似乎没有办法在适配器中获取参数。但是您可以尝试从拥有所有数据的序列化程序中设置headers

    import DS from 'ember-data';
    export default DS.RESTSerializer.extend({
        serializeIntoHash: function(data, type, record, options) {
            this._super(data, type, record, options);
            var adapter = this.store.adapterFor(type.modelName);
            var hmacString = CryptoJS.HmacSHA256('string', data).toString(CryptoJS.enc.Hex);
            adapter.set('headers', {
                Authorization: hmacString
            });
        }
    });
    

    我不确定这是否可行,我没有测试过。这只是一个想法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-14
      相关资源
      最近更新 更多