余烬客户端身份验证,路由身份验证

Ember Client Side Authentication, route authentication

本文关键字:身份验证 路由 余烬 客户端      更新时间:2023-09-26

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

我有这个余烬应用程序,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({
});

但是我陷入困境的一点是,在用户进行身份验证后,我将如何首先仅显示登录模板,然后再显示整个应用程序?我将不胜感激对此的一些解释和帮助。

我不能说它比 Alex 在他的拉取请求中如何谈论它更好,路由器整容在余烬中。 向下看大约四分之一,对于"如何重定向到经过身份验证的路由的登录表单并稍后重试原始转换?

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();
      }
    }
  }
});

查看 http://www.embercasts.com/上的客户端身份验证屏幕投射。他们来自制作 kingpin2k 引用的示例的同一个人,但提供了一个完整的、有效的解决方案。