ember-auth を使用して、ember アプリケーションでセッションを管理しています。Ember-auth は、すべてのルートとコントローラーに自動的に挿入される認証オブジェクトを提供します。
アプリケーションにユーザー登録ルートがあります。ユーザーがこのルートにいる間にログインした場合、ユーザーをこのルートから遠ざけたいと思います。そのために、次のコードを思いつきました。
App.RegisterRoute = Em.Route.extend({
// redirect the user if he is already logged in
redirect: function() {
if (this.auth.get('signedIn')) {
this.transitionTo('index');
}
},
//check if user logged in and redirect him if he did
loginStatusChanged: (function() {
if (this.auth.get('signedIn')) {
this.transitionTo('index');
}
}).observes('auth.signedIn'),
setupController: function(controller) {
controller.set('user', App.User.create());
},
});
コードは機能しますが、ユーザーが登録ルートにいるときだけでなく、すべてのルートでオブザーバーが起動します。
現在の私の解決策は、現在のルートを取得し、それが「登録」に等しいかどうかを確認してから、移行を行うことです。これは理想的ではないようです。これを行う「残り火の方法」はありますか?