2017-04-14 1 views
0

私は初期ロード時にユーザがサインインページにリダイレクトされるアプリケーションを持っています。ユーザーが認証されると、ユーザーはホームページに移動します。ユーザーの確認中に、HttpOnlyのCookieもブラウザに設定されます。だから、彼がアプリをリフレッシュするか、別のタブで開くたびに、ユーザーがログインする手間を省くことができます。私はアプリケーションルートのbeforeModelフック内のサーバに認証リクエストを送り返します。これにより、ユーザーとページの読み込みが予想どおりに行われることが確認されます。しかし、サーバーの応答が401(ユーザーがログアウトしたかクッキーが期限切れになったため)の場合、アプリケーションはユーザーをログインページにリダイレクトします。すべてが正常に動作し、期待どおりに動作します。非同期呼び出しでのハンドルリダイレクト

しかし、解決するのは難しいことがいくつかあります。

  1. ユーザーは/私が認証要求がログインテンプレートをレンダリングするか、彼はすでにログインしている場合は、ホーム画面にリダイレクトするように決定する前に完了するのを待つ必要がログインしてください。

  2. としてパスを与えた場合

    また、ターゲットURLにmodelフックを実行する前に、検証呼び出しが完了するまで待ちます。私は応答が認証呼び出しのための401であったとしても、モーダル要求がサーバーに送られるのを見ました。

良い例がログインすると、彼らはあなたのホームページにあなたを取る/ログインページに移動後githubのページ、です。

答えて

0

経路のある実験の後。 私はこの解決策を考え出しました。

  1. すべてのURLリクエスト(リフレッシュまたは入力パスのいずれか)で、/loginの場合を除き、urlを保存します。これはほとんどの場合、アプリケーションルートのフックbeforeModelフックで行われます。
  2. 次に、認証されたユーザーがブラウズできるルート階層の各最上位ルートで、ログインルートにリダイレクトされます。
  3. ログインルートで、認証のためにAPIを適切に呼び出します。ユーザーが格納されているURLまたはホームページに何も格納されていない場合にログインしている場合。しかし、401が戻ってきた場合は、テンプレートをロードします。 APIの非同期呼び出しがbeforeModel,modelまたはafterModelフックのいずれかで行われていることを確認してください。また、返信文でAPIを呼び出す必要があります。そうしないと、テンプレートは問題なく読み込まれます。

注: 1.あなたはアプリを通じてアクセスすることができますいくつかのserviceに格納されたURLを持つことができます。サービスストアに、将来の使用のために他のログイン情報を保存させることもできます。 2.不要なリダイレクトの場合は、/loginにリダイレクトする前に、いくつかのチェックを行ってください(2)。ルートがページロードではなく内部的に遷移したとします。 3.認証リクエストで401件のケースを処理することを忘れないでください。あるいは、ページに何も表示されず、コンソールにエラーが表示されることもあります。

希望すると便利です。

関連する問題