Ember.js 适配器中的Ember承诺感知头
正在寻找稍后使用异步调用返回的值在Ember适配器中设置头的方法 正在尝试从Amplify的Auth.currentSession设置idToken returend,这是一个promise函数,在到期时在内部处理刷新令牌 像这样的东西等待回应-Ember.js 适配器中的Ember承诺感知头,ember.js,promise,async-await,aws-amplify,amplifyjs,Ember.js,Promise,Async Await,Aws Amplify,Amplifyjs,正在寻找稍后使用异步调用返回的值在Ember适配器中设置头的方法 正在尝试从Amplify的Auth.currentSession设置idToken returend,这是一个promise函数,在到期时在内部处理刷新令牌 像这样的东西等待回应- headers: computed(async function() { return { 'Authorization': await Auth.currentSession().getIdToken();
headers: computed(async function() {
return {
'Authorization': await Auth.currentSession().getIdToken();
};
})
我发现我们不能为头创建承诺感知的计算属性
我也不是在寻找使用ember simple auth/ember cognito或任何其他插件的解决方案,
我只需要使用plain amplify库和Ember adapters头就可以实现这一点一个可能的解决方案是覆盖适配器的ajax方法
最新版本(目前为3.21)的解决方案 导出默认类ApplicationAdapter扩展RestaAdapter{ @注入身份验证//我自己的身份验证服务 ajax…args{ 返回新的PromiseSolve,拒绝=>{ 这是。\u getHeaders.thenheaders=>{ 设置“标题”,标题; super.ajax…args.thenresolve,reject; }; } } 异步\u getHeaders{ const token=等待this.auth.token; 返回{ 'Authorization':'Bearer${token}` } } }
这是你要找的东西吗?跟踪标题获取建议@GokulKathirvel✌️. 希望跟踪属性是新的计算属性方式,因为我们仍然在2.15v中,不熟悉注释。虽然我认为这应该是同样的行为。如果要在头中设置的值将在服务内部的某个时间间隔内更新,我可以使用您的解决方案,并且我可以基于该服务属性计算/跟踪头的值。但对我来说,情况是,每当适配器中的头被调用时,只有在那一刻我才会进行异步调用以获取值并在头中设置。我不是Ember数据的用户。但是,您需要访问每个服务器请求的头,对吗?如果是这样,您可以提前进行getIdToken异步调用吗?但是,在每个请求上访问此异步调用似乎都是一种开销。如果过期,则每次都需要异步调用此异步调用以获取有效的idToken,检索一个手头有refreshToken的新idToken,这无论如何都会放大库行为。现在是的,就像你说的那样。在通过Ember数据进行呼叫之前,将预先收集令牌,并通过路由/组件层的adapter或snapshot.adapter.option进行设置。但是我需要重构它们,并将其移动到适配器层内部的一个位置。我尝试了这个方法&它似乎完全符合我的需要。首先对实际适配器的headers属性进行了一些调整,然后在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);
}
});