我一直在谷歌搜索这个问题,但是你无法找到令人满意的答案或解决方案。
我有这个Ember应用,http://jsbin.com/aHiVIwU/28#。
我的用例非常简单。我想在用户通过身份验证后才显示用户的整个应用程序。我没有使用Ember Data,因此身份验证也将通过$.ajax
进行。
如果我没错,我会有一个像这样的登录页面的模板,
<script type="text/x-handlebars" id="login">
<h1>Login</h1>
{{view Ember.TextField valueBinding="username"}}
{{view Ember.TextField type="password" valueBinding="password"}}
<button {{action 'login' class="btn"}}>Login</button>
</script>
然后我会映射资源,
App.Router.map(function() {
this.resource( 'login');
});
然后会有相应的控制器吗?
App.LoginController = Ember.ObjectController.extend({
});
但是我遇到困难的地方是,我将如何首先显示登录模板,然后在用户获得身份验证后显示整个应用程序?我会很感激一些解释&amp;帮助。
答案 0 :(得分:2)
我不能说它比亚历克斯在他的拉动请求中谈到它更好,因为在ember中使用路由器整容。查看下降的四分之一,对于'如何重定向到经过身份验证的路由的登录表单并稍后重试原始转换?':
https://gist.github.com/machty/5647589
基本上在需要对用户进行身份验证的资源的根路由中,您将保存当前转换,转换到登录路由,然后在进行身份验证后重新启动上一次转换。
他包含了一个非常简单的例子,他创建了一个mixin,可以附加到需要身份验证的所有路由上,你不必重复代码等。
http://jsbin.com/axarop/54/edit
App.NeedsAuthMixin = Ember.Mixin.create({
beforeModel: function(transition) {
// We're using beforeModel here to
// make sure the user is authenticated.
var loginController = this.controllerFor('login');
if (!loginController.get('hasLoggedIn')) {
alert('you must log in!');
loginController.set('afterLoginTransition', transition);
this.transitionTo('login');
}
}
});
App.ArticlesRoute = Ember.Route.extend(App.NeedsAuthMixin);
App.LoginRoute = Ember.Route.extend({
events: {
login: function () {
this.controller.set('hasLoggedIn', true);
var savedTransition = this.controller.get('afterLoginTransition');
if (savedTransition) {
this.controller.set('afterLoginTransition', null);
savedTransition.retry();
}
}
}
});
答案 1 :(得分:0)
查看http://www.embercasts.com/上的客户端身份验证屏幕强制转换。他们来自制作kingpin2k引用的示例的同一个人,但提供了一个完整的,有效的解决方案。