我试图在Ember.js 1.5中开发一个非常简单的认证系统,但我在前端部分遇到了一些麻烦。在ember.js中构建一个非常简单的认证系统
我对烬来说很新,所以请原谅我的无知。
因此,这里有我的路线,它们的实现
App.Router.map(function() {
this.route('login');
this.resource("posts");
});
App.AuthenticatedRoute = Ember.Route.extend({
beforeModel: function(transition) {
if (Ember.isEmpty(App.Auth.get('authToken'))) {
this.transitionTo('login');
}
}
});
App.LoginRoute = Ember.Route.extend({
renderTemplate: function() {
this.render('login_template');
},
actions: {
createSession: function() {
var router = this;
var email = this.controller.get('email_login');
var password = this.controller.get('password_login');
if (!Ember.isEmpty(email) && !Ember.isEmpty(password)) {
$.post('/api/v1/session', {email: email, password: password}, function(data) {
var authToken = data.session.auth_token;
var user_id = data.session.user_id;
App.Store.authToken = authToken;
App.Auth = Ember.object.create({
authToken: authToken,
user_id: user_id
});
router.transitionTo('index');
});
}
}
}
});
App.ApplicationRoute = App.AuthenticatedRoute.extend({
model: function() {
return this.store.find('post');
}
});
App.ProceduresRoute = App.AuthenticatedRoute.extend({
model: function() {
return this.store.all('post');
}
});
// Ommitting the models because they aren't necessary for this question
所以当然主要关心的是,App.Auth
最初是不确定的。我已经复制了教程中的大部分代码,但我不知道是否有可以初始化的任何session variables
。在任何情况下,我总是可以在开始时定义App.Auth
,其初始值为null,因为它的属性可能会产生其他后果,但我不知道(我是新来的ember)。
所以我在这里的问题是,如何正确存储来自服务器(auth_token和user_id)的响应。此外,如果auth_token
没有设置(这是我正在尝试使用已验证的路由部分),请让用户重定向到login
路由。
如果你不能提供完整的答案,甚至一些提示/评论将非常有帮助,谢谢!
你是什么意思的好方式?除了空对象引用之外,还有一些特定的问题吗? 'Ember.isEmpty(Ember.get(App,'Auth'))' – Kingpin2k
我的意思是说,如何避免这个'null'问题,再加上用ember的最佳实践来存储这样的东西。 – user1952811
我能否像其他控制器那样访问Auth变量,在其他应用程序中的哪个位置? – user1952811