是否有可能限制加载模型直到某些条件?

时间:2016-02-15 18:00:10

标签: ember.js ember-2.0.0

我有一个名为帖子的模型。和组件名为posts-list

应用程序/模板/组件/帖-list.hbs:

{{#each posts as |post|}}
  {{post.title}}
{{/each}}

主要模板:

{{posts-list posts=model}}

应用程序/路由/ posts.js:

export default Ember.Route.extend({
  model() {
    return this.store.findAll('post');
  }
});

问题描述:如果用户授权或不授权,可以加载这些帖子,但是当用户授权的标题稍有不同时(数据来自使用JWT的服务器)。

我正在使用带有自定义授权程序和身份验证器的ember-simple-auth。 Auth过程看起来像 - 用户点击链接并转到后端,然后它重定向回主页,令牌为GET参数。我在app / routes / application.js中覆盖了setupController并调用了

this.get('session').authenticate('authenticator:custom', token);

在身份验证器中我有功能:

  authenticate: function(token) {
    return new Ember.RSVP.Promise((resolve, reject) => {
      Ember.$.ajax({
        url: ENV.APP.API_HOST + '/api/users',
        type: 'GET',
        contentType: 'application/json',
        dataType: 'json',
        headers: {
          'Accept': 'application/json',
          'Authorization': token
        }
      }).then(function(response) {
        Ember.run(function() {
          resolve({ token: token });
        });
      }, function(xhr, status, error) {
        var response = xhr.responseText;
        Ember.run(function() {
          reject(response);
        });
      });
    });
  }

所以我试图让当前用户使用令牌,如果成功,则用户被授权。

除了一件事,一切都很好。在请求当前用户之前请求发帖,因此即使用户实际授权他也会看到非授权内容。是否有可能告诉Ember关于加载顺序(或在auth之后重新加载数据,但是这将产生第二个不是首选的请求)。

1 个答案:

答案 0 :(得分:0)

为此目的引入了beforeModel

beforeModel(transition) {
  let token = transition.queryParams.token;
  let promise = this.get('session').authenticate('authenticator:custom', token);

  promise.then(()=> {
    alert("You're in!");
  });

  promise.catch(()=> {
    transition.abort();
    this.transitionTo('loggin');
  });
}