18

angular js アプリに認証システムを実装しています。

以下のように計画しています。

  1. ユーザー情報を取得(ログインフォームから名前とパス)
  2. ユーザーが存在するかどうかを確認する
  3. 存在する場合、サーバーはセッション Cookie で応答し、フロントエンドは特定のページにリダイレクトします。
  4. 次に、ユーザーは API リクエストを生成するタスクを実行します
  5. API リクエストには、ステップ 3 で送信された Cookie 情報が含まれている必要があります
  6. サーバーは、Cookie が生成されたかどうかを確認し、Cookie が見つかった場合は、API 要求の結果で応答します。そして、私のサービスでは、次のようなことをしています
    MyApp.service('myAuth', function($http, $q) {
        this.authHeader = null;
        this.checkAuth = function(){
        // API 呼び出しを行い、成功すると this.authHeader = response が設定されます
        }
        this.isAuthenticaed = function(){
            this.authHeader ? this.authHeder を返します: false を返します。
       }

ログイン フォームを送信した後、checkAuth を呼び出して、サーバーからセッション Cookie を取得します。次の REST 呼び出しの実行中に Cookie 情報を追加する方法と、ユーザーがログイン後にアプリケーション全体をナビゲートするタイミングについて、それぞれを確認したいと思います。 time isAuthenticaed true または false、Angularjs で別のページに移動すると、最初の呼び出しから true に設定した後にリセットされますか? そして、私のアプローチ1-6は良いですか、それとも具体的な提案はありますか? ところで、私は以前のエントリをチェックしましたが、それらは私が知りたいものではありません.

4

4 に答える 4

35

バックエンドについてはわかりませんが、これが私が行う方法です

  • 別のログイン ページを作成します (Angular サブ ビューやモーダル ダイアログではなく、専用の URL)。
  • ユーザーが認証されていない場合は、このログイン ページにリダイレクトします。これは、サーバーのリダイレクトによって行われます。このページは、ユーザー\パスワードをサーバーに送信するだけなので、angular フレームワークを使用する場合と使用しない場合があります。
  • ログインページから POST (AJAX リクエストではない) を作成し、サーバーで検証します。
  • サーバーで認証 Cookie を設定します。(フレームワークが異なれば、その方法も異なります。ASP.Net はフォーム認証 Cookie を設定します。)
  • ユーザーが認証されたら、ユーザーを実際の angular アプリにリダイレクトし、そのすべてのコンポーネントをロードします。

これにより、Angular のクライアント側で認証を管理するために必要なコードが節約されます。ユーザーがこのページにたどり着いた場合、そのユーザーは認証され、Cookie を持っています。

また、ブラウザのデフォルトの動作は、リクエストごとにドメインに関連付けられたすべての Cookie を送信するため、Angular が Cookie を送信しているかどうかを心配する必要はありません。

于 2013-08-17T13:25:15.697 に答える
7

http-auth-interceptor を使用します。http://ngmodules.org/modules/http-auth-interceptor

私のバックエンド (asp.net mvc) では、単純な認証サービスを構築し401、ユーザーが認証されていない場合は http エラーを返します。次に、SPA サイトのログイン ビューでエラーを処理します。

于 2013-08-17T22:06:24.567 に答える