0

このプロジェクトに JWT トークンを実装しようとしています。そのために、$resourceこのように で Authorization ヘッダーを使用しました。

UI状態「A」でログインすると、ログイン後、トークンをlocalStorageに入れます

$localStorage.token = data.token;

ページの UI 状態「B」に移動すると、次のサービスが使用され、トークンなしでリクエストが送信されます。ただし、ページを更新すると、トークンを使用して同じ要求が送信されます。

angular.module('BlurAdmin')
    .factory('valueService', ['Token','$localStorage','$resource', 'endpoint', function(Token,$localStorage, $resource, endpoint) {
        return {
            getValues: $resource(endpoint + '/admin/getvalues', null, {
                'get': {
                    method: 'GET',
                    headers:{'Authorization':'Bearer '+$localStorage.token}
                 }
            }),
        }   
}]);

$localStorage.tokenサービスは最初に値を保存し、状態が変化してもそれを使用すると思います。ただし、ページがリロードされると、$localStorage.token値が再び取得されます。

$localStorage.tokenUI の状態が変化するたびに、このサービスに強制的に値を取得させるにはどうすればよいですか?

前もって感謝します!

4

3 に答える 3

1

各 XHR GET 操作でリソースにヘッダー値を計算させるには、値の代わりに関数を指定します。

angular.module('BlurAdmin')
    .factory('valueService', ['Token','$localStorage','$resource', 'endpoint', function(Token,$localStorage, $resource, endpoint) {
        return {
            getValues: $resource(endpoint + '/admin/getvalues', null, {
                'get': {
                    method: 'GET',
                    //headers:{'Authorization':'Bearer '+$localStorage.token}
                    headers:
                       {'Authorization':
                            function () {
                               return 'Bearer '+$localStorage.token;
                            }
                       }
                 }
            }),
        }   
}]);

値が提供されると、リソースの作成時にヘッダー値が計算されます。get関数が提供されると、リソースメソッドが呼び出されるたびにヘッダー値が計算されます。

  • headers – –サーバーに送信する HTTP ヘッダーを表す文字列を返す文字{Object}列または関数のマップ。関数の戻り値が null の場合、ヘッダーは送信されません。関数は、構成オブジェクトを引数として受け入れます。

    -- AngularJS $http サービス API リファレンス - 使用法

于 2017-02-07T18:00:56.970 に答える