0

私はこれについて何度もグーグルで調べてきましたが、あなたが言うことができる満足のいく答えや解決策を見つけることができませんでした.

私はこの 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({
});

しかし、私が立ち往生している点は、最初にログイン テンプレートのみを表示し、次にユーザーが認証された後にアプリ全体を表示するにはどうすればよいですか? これについての説明とヘルプをいただければ幸いです。

4

2 に答える 2

2

Alex がプル リクエストで、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();
      }
    }
  }
});
于 2013-10-27T06:39:31.443 に答える