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}