是否可以在某些情况下限制加载模型?
Is it possible to restrict loading model until some condition?
我有一个名为 posts 的模型。组件名为 posts-list
app/templates/components/posts-list.hbs:
{{#each posts as |post|}}
{{post.title}}
{{/each}}
主模板:
{{posts-list posts=model}}
app/routes/posts.js:
export default Ember.Route.extend({
model() {
return this.store.findAll('post');
}
});
问题描述:无论用户是否授权,这些帖子都可以加载,但是当用户授权时标题会有点不同(数据来自服务器使用JWT)。
我将 ember-simple-auth 与自定义授权方和身份验证方一起使用。授权过程看起来像 - 用户点击 link 并转到后端,然后它重定向回主页,使用令牌作为 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 加载顺序(或在验证后重新加载数据,但这会产生第二个请求,这不是首选)。
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');
});
}
我有一个名为 posts 的模型。组件名为 posts-list
app/templates/components/posts-list.hbs:
{{#each posts as |post|}}
{{post.title}}
{{/each}}
主模板:
{{posts-list posts=model}}
app/routes/posts.js:
export default Ember.Route.extend({
model() {
return this.store.findAll('post');
}
});
问题描述:无论用户是否授权,这些帖子都可以加载,但是当用户授权时标题会有点不同(数据来自服务器使用JWT)。
我将 ember-simple-auth 与自定义授权方和身份验证方一起使用。授权过程看起来像 - 用户点击 link 并转到后端,然后它重定向回主页,使用令牌作为 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 加载顺序(或在验证后重新加载数据,但这会产生第二个请求,这不是首选)。
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');
});
}