5

私は.Net MVC WebApiアプリを持っていて、Angularjsだけでフロントエンドを書こうとしています。json 経由でデータを取得して操作することはできますが、データを保護し、サーバーのヘッダーに Base64 認証を追加する必要があります。いくつかの .net ビュー テスト ページを参照すると、ユーザー/パスを要求する適切なログイン ボックスが表示されるので、引き続き json を取得できます。

どうすればよいかわからないのは、Angular が $resource に設定しているヘッダーにこの情報 (ユーザー/パス) を渡すことです。これを行う方法をよりよく示す完全な例はありますか? 私はそれがクッキーを含み、サーバーが返すトークンを使用していることを知っていますが、ピースをまとめる方法がわかりません.

これらすべてをまとめたら、すべてのレイヤー (DAL、RESTFUL、コンソール テスト レイヤー) を介して、この完全なスケルトンの例を投稿したいと考えています。

問題は、AngularJS の $resources を使用するときに、認証情報をクライアントのヘッダーにどのように挿入するかということです。

ありがとう

4

1 に答える 1

3

サーバー側のヘッダーに Cookie を配置すると、AngularJS は常にこの Cookie を送信します。あなたは何もする必要はありません。

Angular 側の cxookie ではなくヘッダーでトークンを渡したい場合は、$httpProvider.defaults.headers.common['X-Auth'] = yourKey;構成ブロックで次のようにします。

次に、ユーザーがログに記録されているかどうか、またはユーザーが権利を持っているかどうかを知りたい場合は、インターセプターを実装するだけです。これは、構成ブロックで常に responseIntercetors をプッシュする単純なファクトリです。

このファクトリはサーバーからの各応答をリッスンし、その実装でエラーの場合の応答のステータス コードを確認します。

401 --> 記録されていません 403 --> 許可されていません

工場の例:

myModule.factory('myHttpInterceptor', function ($q) {
    return function (promise) {
        return promise.then(function (response) {
            // do something on success              
            return response;
        }, function (response) {
            // do something on error
            //check status 401 or 403
            return $q.reject(response);
        });
    };
});

次に、構成ブロックで次のように http responseIntercetors にファクトリを配置します。

myModule.config(function ($httpProvider) {
    $httpProvider.responseInterceptors.push('myHttpInterceptor');
});

このソリューションは AngularJS 1.1.4 (まだ不安定) で非推奨になっていることに注意してください ...

詳細については、この投稿を参照してください: AngularJS Intercept all $http JSON response

それが役に立てば幸い

于 2013-09-21T10:18:50.643 に答える