11

私は ember.js アプリケーションを構築していますが、認証にハングアップしています。json レスト バックエンドは rails です。すべてのリクエストは、セッション Cookie ( warden ) を使用して認証されます。

ユーザーが最初にアプリケーション ルート レールに移動すると、ログイン ページにリダイレクトされます。セッションが承認されると、ember.js アプリが読み込まれます。読み込まれると、ember.js アプリは、ember-data RESTadapter と認証用のセッションを使用して、バックエンドにリクエストを送信します。

問題は、セッションが所定の時間後に期限切れになることです。多くの場合、これが発生すると、ember.js アプリがまだ読み込まれます。したがって、バックエンドへのすべてのリクエストは 401 {not autorized} レスポンスを返します。

この問題を解決するには、サーバーから 401 {not autorized} 応答が返されるたびに、ember.js アプリがログイン モーダルでユーザーに通知する必要があると考えています。

401 {not autorized} 応答をリッスンし、ユーザーが変更や状態を失うことなく再ログインできるようにする方法を知っている人はいますか?

トークン認証などの他のアプローチを見てきましたが、セキュリティへの影響が懸念されます。

誰でもこの問題に対する実用的な解決策を持っていますか?

4

4 に答える 4

2

変更や状態を失うソリューションを受け入れたい場合、jQuery ajaxError ハンドラーを登録してログイン ページにリダイレクトできます。

$(document).ajaxError(function(event, jqXHR, ajaxSettings, thrownError) {
  // You should include additional conditions to the if statement so that this
  // only triggers when you're absolutely certain it should
  if (jqXHR.status === 401) {
    document.location.href = '/users/sign_in';
  }
});

このコードは、jQuery ajax リクエストがエラーで完了するたびにトリガーされます。

もちろん、このようなソリューションを実際に使用することはありません。ユーザー エクスペリエンスが非常に低下するからです。ユーザーは自分がしていることからヤンクされ、すべての状態を失います。実際に行うことは、おそらくモーダル内で LoginView をレンダリングすることです。

このソリューションのもう 1 つの優れた点は、ember-data の外部でサーバーにリクエストを行う場合でも機能することです。危険なのは、jQuery を使用して他のソースからデータをロードしている場合、または 401 エラー処理が既に他の場所に組み込まれている場合です。上記の if ステートメントに適切な条件を追加して、確実にトリガーされることが確実な場合にのみトリガーされるようにする必要があります。

于 2013-02-14T21:14:44.033 に答える
2

私の知る限り、これは ember-data の現在の実装では対処されておらず、ember-data README には「エラー状態の処理」がロードマップにあると記載されています。

とりあえず、独自のエラー処理アダプターを実装できます。DS.RestAdapterの実装を見てください 。これをスターターとして使用することで、そこにエラー処理を追加するのはそれほど難しくありません (たとえば、jQuery.ajax 呼び出しに渡されるデータ ハッシュにエラー関数を追加するだけです)。

于 2012-11-13T12:09:34.153 に答える