Ember客户端身份验证,路由身份验证

时间:2013-10-27 03:17:32

标签: javascript authentication ember.js

我一直在谷歌搜索这个问题,但是你无法找到令人满意的答案或解决方案。

我有这个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;帮助。

2 个答案:

答案 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引用的示例的同一个人,但提供了一个完整的,有效的解决方案。