1

JSFiddle を参照してください: http://jsfiddle.net/cyclomarc/MHvrH/3/

Ember で認証を実装する方法を示すサンプルは多数あります。ルートへのアクセスを保護するために、有効なトークンがない場合はログイン ページにリダイレクトされます。ログインに成功すると (有効なトークンを取得すると)、最初に要求されたページにリダイレクトされます。

実装: ログインへのリダイレクトの前に、要求された遷移をオブジェクトに保存します。ログイン後、オブジェクト プロパティを読み取り、transition.retry を実行します。

login: function () {
    var self = this;

    App.Session.set('token', '1234567890');
    var attemptedTransition = App.Session.get('attemptedTransition');

    if (attemptedTransition) {
      attemptedTransition.retry();
    }
    ....

これは、ルート URL を介してアプリケーションにアクセスする場合にうまく機能します。これは JSFiddle で確認できます。出版物をクリックすると、出版物のリストが表示されます。次に、出版物をクリックして詳細を表示するには、ログインする必要があります。ログインをクリックすると (成功したログインをシミュレートするだけです)、「詳細」ルートに移行します。

ただし、「詳細」URL に直接アクセスする(e.g. browse to http://yyy/index.html#/publications/1)と、保存されたトランジションの .retry は失敗します。その場合、ID(ルートのパラメーター)が失われているようです。URL は次のようになります: http://yyy/index.html#/publications/undefined...

これは既知の問題ですか? 回避策はありますか?

詳細情報:

トランジションを検査すると、機能しない場合に備えて、providedModelsArray が設定されていません。これは Ember.data と関係がありますか?

正しいトランジション (Ember.inspect(savedTransition)):

    {router: [object Object], promise: [object Object], 
data: [object Object], resolvedModels: [object Object], 
providedModels: [object Object], 
providedModelsArray: <App.Publication:ember330:2>, 
sequence: 2, params: [object Object], 
targetName: publications.show, isAborted: true} 

遷移が正しくない (Ember.inspect(savedTransition)):

    {router: [object Object], promise: [object Object], 
data: [object Object], resolvedModels: [object Object], 
providedModels: [object Object], 
providedModelsArray: , 
sequence: 1, params: [object Object], 
targetName: publications.show, 
urlMethod: null, isAborted: true} 
4

1 に答える 1