3

ユーザーが Ember アプリケーションに確実にログインできるようにする最善の方法は何ですか?

ルーティングが興奮する前に任意の URL を傍受し、user_id/password でモーダル ポップアップを表示して、元の URL に移動したいと考えています。

おそらく、他のコントローラー メソッドの前に実行される Rail の application_controller#before_filter に似たものです。

次のルーティングがあります。

App.Router.map(function(){
    this.resource('folder', {path: '/'}, function(){
        this.resource('files', {path: '/:folder_id'}, function(){
            this.route('index');
        });
    });
});

ApplicationRoute をセットアップしようとしています:

App.ApplicationRoute = Ember.Route.extend({
    activate: function(){
        console.log("activating app route");
    }
});

しかし、問題は、 をヒットするindex.html#/folder01と、folderルートの前にルートが実行されることapplicationです。

ワークフローを要約すると、理想的には次のようになります。

  1. ユーザーがindex.html#/folder01URLにヒット
  2. アプリは、ユーザーがログインしているかどうかを確認します。ログインしていない場合は、モーダル ポップアップが表示されます
  3. index.html#/folder01ログイン後、アプリはURLをレンダリングする必要があります

どうもありがとう!

4

3 に答える 3

1

うまくいく解決策を見つけたようです。ここにあります:

App.Router.reopen({
    startRouting: function() {
        if (!App.userProfile.get('loggedIn')) {
            $("#login_dialog").modal('show').one('click', "#login_btn", function(){
                $("#login_dialog").modal('hide');
                App.userProfile.set('loggedIn', true);
                App.startRouting();
            });
        } else {
            this._super();
        }
    }
});

アプリがセッション タイムアウトを検出すると、window.location.reload(). 機能するのはいいことですがApp.reset()、まだ正しく実装されていません。

このソリューションにメモリ リークなどの問題がないことを 100% 確信しているわけではありません。このアプローチについて Ember の専門家から何か聞きたいです。

ありがとう

于 2013-03-25T07:05:48.603 に答える
0

ルートを使用してこれを実現できます。

App.DatasetEditRoute = Ember.Route.extend({
  redirect: function() {
    if (this.controllerFor('currentUser').get('isSignedIn') === false) {
      this.transitionTo('user.login');
    }
  }
});
于 2013-03-21T19:31:58.023 に答える