私は自分の ember-js アプリケーションに ember-simple-auth-0.6.4.js を適用しましたが、よくあるケースが 1 つあります。これが一連の手順です。
- ユーザーはアプリケーションで認証されます (そのためにカスタム認証システムを使用します)。したがって、セッションは有効になります。
- 非アクティブ状態が 20 分間続くと、バックエンド セッションが無効になります。
- ユーザーは (AuthenticatedRouteMixin から派生した) ルートに移動し、クライアントのアプリの残りのセッションがまだ有効であるため、「セッション認証済み」チェックに合格します。
- 次に、ルート モデル フックが呼び出され、ajax リクエストを使用してバックエンドからデータをロードしようとしましたが、バックエンド セッションが無効であるため、401 の無許可の応答が返されました。
- 401 エラー応答の後、クライアントのアプリ セッションが無効になります。次に、application-route-mixin で定義された sessionInvalidationSucceeded() ハンドラーが呼び出され、場所が変更されます: window.location.replace(Configuration.applicationRootUrl);
問題は次のとおりです。applicationRootUrl で定義された URL が認証されたルートの下にある場合、ログイン ページがユーザーに表示されますが、認証後、ユーザーは再び applicationRootUrl に移動しますが、最初に ajax エラーが発生したページには移動しません。
これに対する私の解決策:
AuthenticatedRouteMixin beforeModel() フックでは、最後の遷移を保存します。
Configuration.beforeInvalidationTransition = transition;
ApplicationRouteMixin で、sessionInvalidatedSucceeded フックを再定義します。
sessionInvalidationSucceeded: function() { if (Configuration.beforeInvalidationTransition) { this.get(Configuration.sessionPropertyName) .set('attemptedTransition',Configuration.beforeInvalidationTransition); } this.transitionTo(Configuration.authenticationRoute);
そのため、401 エラーが発生した場合、ユーザーはログイン ページ (Configuration.authenticationRoute) にリダイレクトされ、エラーが発生したルートは attemptsTransition に保存されるため、ログインに成功した後、ユーザーは作業を停止した場所にリダイレクトされます。
それは理にかなっていますか、それともこの問題に対するよりエレガントな解決策がありますか?