Ember.js RESTAdapter:在设置报头时访问JSON参数

Ember.js RESTAdapter: Access JSON params when setting headers

本文关键字:访问 JSON 参数 报头 设置 js RESTAdapter Ember      更新时间:2023-09-26

我正在使用一个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")
});

上面的代码是工作的,但我需要用实际的参数替换params变量,在JSON格式(如上所述)。

如何做到这一点?

我假设你想建立一个基于查询参数的动态头。

我不认为你可以从headers属性中获得任何查询参数,你可能想通过覆盖find*函数来尝试构建header

我不认为在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
        });
    }
});

我不确定这将工作,我没有测试它。这只是一个想法。