2016-05-06 19 views
0

私のJLSアプリケーションでJWTを実装しました。私はすべてのhttp機能を持つjwt認証キーを追加しました。私のコード:JWTの実装がangul jsで動作していません

angular.module('IttadishopServices', []) 
    .config(function Config($httpProvider, jwtInterceptorProvider) { 
     jwtInterceptorProvider.tokenGetter = function (User) { 
      var jwt = localStorage.getItem('id_token'); 
      if (localStorage.getItem("id_token") === null) { 
       User.generateToken().success(function (data) { 
        localStorage.setItem('id_token', data); 
        return data; 
       }); 

      } else { 
       return jwt; 
      } 
     } 
     $httpProvider.interceptors.push('jwtInterceptor'); 

    }); 

問題は、認証キーがヘッダーに追加されているという問題です。各要求はサーバーに2回送信されます。私はその認証キーをさまざまな方法で追加しようとしましたが、各要求がサーバーに2回、認証キーを含む1つの要求と認証キーのない別の要求を送信するたびに追加しました。コンソールのスクリーンショットを追加しました。

Console image for duplicate request

答えて

0

問題は、あなたがあなたのintercepterで約束を返すされていない、あなたはそのインターセプタで非同期関数を使用していることです。 $ qにasynch関数をラップして約束を返すと、リクエストを2回送信するという問題が解決されます。非同期関数が完了するのを待つことなく(キーなし)、かつUser.generateToken()の約束が解決されると一度。ラッピング:

angular.module('IttadishopServices', []) 
    .config(function Config($httpProvider, jwtInterceptorProvider) { 
     jwtInterceptorProvider.tokenGetter = function (User) { 
      var jwt = localStorage.getItem('id_token'); 
      if (localStorage.getItem("id_token") === null) { 
       var deferred = $q.defer(); 
       User.generateToken().success(function (data) { 
        localStorage.setItem('id_token', data); 
        deferred.resolve(data); 
       }); 
       return deferred.promise; 
      } else { 
       return jwt; 
      } 
     } 
     $httpProvider.interceptors.push('jwtInterceptor'); 
    }); 

しかし、その機能を工場ではなく、configブロックで定義するべきではありません。

出典: http://www.webdeveasy.com/interceptors-in-angularjs-and-useful-examples/

+0

それは大丈夫です。私はそれを解決するためにすべての可能な方法をここで使用しようとしました。しかし、余分な要求は "option"メソッドで発生しています。なぜオプションメソッドのリクエストがここで発生しているのですか?私はここにリクエストヘッダを追加しています。 リクエストURLます:http://api.ittadishop.local/ittadi/checkUserSession/ リクエスト方法:OPTIONS ステータスコード:200 OK リモートアドレス:192.168.44.44:80 – Mohsin

+0

OPTIONS要求がプリフライトリクエストされていること。詳細はこちら:http://stackoverflow.com/questions/1256593/why-am-i-getting-an-options-request-instead-of-a-get-request –

関連する問題