ember.js 适配器中的Ember promise感知标头

dnph8jn4  于 2022-11-05  发布在  其他
关注(0)|答案(2)|浏览(155)

正在寻找一种方法来设置标题在Ember适配器稍后与值返回从异步调用。
尝试从Amplify的Auth.currentSession()设置idToken returend,这是一个promise函数,它在内部处理过期时刷新令牌。
像这样等待回应-

headers: computed(async function() {
        return {
          'Authorization': await Auth.currentSession().getIdToken();
        };
      })



我发现我们不能为头文件创建一个承诺感知计算属性。
此外,我不寻找一个解决方案使用ember简单的认证/ember认知或任何其他插件,我需要实现这只是与平原放大库和ember适配器头😟。

gz5pxeao

gz5pxeao1#

一个可能的解决方案是覆盖适配器的ajax方法。

import DS from 'ember-data';

export default DS.RESTAdapter.extend({
    async ajax(...args) {
        // Store the parent call, so it can be called after getting the current session.
        const _super = this._super.bind(this);

        // Sorry, I'm unfamiliar with how you're accessing amplify
        const headers = await amplify.currentSession();

        this.set('headers', {
            'Authentication': headers.auth
        });

        return _super(...args);
    }
});
xj3cbfub

xj3cbfub2#

适用于较新版本(当前为3.21)的解决方案

export default class ApplicationAdapter extends RESTAdapter {
  @inject auth //my own auth service

  ajax(...args) {
    return new Promise((resolve, reject) => {
      this._getHeaders().then((headers) => {
        this.set('headers', headers);
        super.ajax(...args).then(resolve, reject);
      });
    })
  }

  async _getHeaders() {
    const token = await this.auth.token();
    return {
      'Authorization': `Bearer ${token}`
    }
  }
}

相关问题