1

私は自分の ember-js アプリケーションに ember-simple-auth-0.6.4.js を適用しましたが、よくあるケースが 1 つあります。これが一連の手順です。

  1. ユーザーはアプリケーションで認証されます (そのためにカスタム認証システムを使用します)。したがって、セッションは有効になります。
  2. 非アクティブ状態が 20 分間続くと、バックエンド セッションが無効になります。
  3. ユーザーは (AuthenticatedRouteMixin から派生した) ルートに移動し、クライアントのアプリの残りのセッションがまだ有効であるため、「セッション認証済み」チェックに合格します。
  4. 次に、ルート モデル フックが呼び出され、ajax リクエストを使用してバックエンドからデータをロードしようとしましたが、バックエンド セッションが無効であるため、401 の無許可の応答が返されました。
  5. 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 に保存されるため、ログインに成功した後、ユーザーは作業を停止した場所にリダイレクトされます。

それは理にかなっていますか、それともこの問題に対するよりエレガントな解決策がありますか?

4

1 に答える 1

1

を使用せずに、セッションの最後のトランジションをすぐに保存できConfiguration.beforeInvalidationTransitionます。OAuth 2.0 オーセンティケーターが行うように、有効期限が切れる前にアクセス トークンを更新することもできます (こちらを参照してください: https://github.com/simplabs/ember-simple-auth/blob/master/packages/ember-simple- auth-oauth2/lib/simple-auth-oauth2/authenticators/oauth2.js#L167 )

于 2014-07-31T07:51:52.827 に答える