我的老板开了一个应用程序,现在我们正在使用夹具数据。应用程序路由有一个模型钩子:
model: function(){
return this.store.find('user', 1);
}
这基本上会设置登录用户。现在我添加了登录路线,现在我想要执行以下操作: 1)当加载应用程序时,将没有登录用户,应用程序将自动转换为登录。
2)用户输入登录信息,当它正确时,即应用程序路径的模型获取数据
2的第二部分是我将被困住的地方。我知道如何将用户ID从登录控制器发送到应用程序控制器,但是如何告诉模型根据控制器userId属性返回用户?基本上找到(' user,userID)userID来自控制器?
答案 0 :(得分:1)
您应该查看Ember Simple Auth
我目前正在应用中使用它,并发现它非常有助于提供您需要的功能。使用它就像从mixin扩展每条路径一样简单:
// app/routes/application.js
import ApplicationRouteMixin from 'simple-auth/mixins/application-route-mixin';
export default Ember.Route.extend(ApplicationRouteMixin);
这将调用您的身份验证挂钩(只需查看文档)或重定向到您的身份验证路由,您可以在其中定义登录逻辑。
然后你可以用有效的会话检查来包装东西:
{{#if session.isAuthenticated}}
<a {{ action 'invalidateSession' }}>Logout</a>
{{else}}
{{#link-to 'login'}}Login{{/link-to}}
{{/if}}
会话可以作为属性传递给组件,也可以在应用程序控制器上设置,并通过控制器中的needs
帮助程序进行访问。
至于设置模型,您不必使用模型钩子。
action: {
login: function(userId){
var self = this;
//on fulfillment of promise, set the controller's model
this.store.find('user', userId).then(function(returnedUser){
self.controller.set('model', returnedUser);
}
}
}
此技术依赖于发送的操作,其中userId是一个参数,因此使用把手助手{{action 'login' 1}}
或控制器方法可以更灵活地使用该方法:this.send('login', 1)
您的登录控制器还可以拥有一个在登录时设置的属性userId
。
您的登录控制器,而不是接收userId参数,只需通过登录控制器访问此属性:this.controllerFor('login').get('userId')
有很多方法可以完成您想要的任务。 Ember Simple Auth可能是最好的,但如果你想要推出自己的