2016-05-17 82 views
2

我正在使用AngularJs和JWT Auth。我已經做了一個API,我已經測試過了。AngularJs和令牌

隨着每個請求的api期望一個令牌和每個響應它給一個令牌對象回來。但是當我嘗試像這樣:

employeeAppModule.config([ 
     '$httpProvider', 
     function ($httpProvider) { 
      $httpProvider.interceptors.push(function() { 
       var token, headers, $cookies; 

       //inject cookies 
       angular.injector(['ngCookies']).invoke(['$cookies', function(_$cookies_) { 
        $cookies = _$cookies_; 
       }]); 

       return { 
        request: function (request) { 
         token = $cookies.get('jwt-token'); 
         headers = request.headers || (request.headers = {}); 

         if(token != null && token != 'undefined') { 
          headers.Authorization = token; 
         } 
         return request; 
        }, 
        response: function (response) { 
         if (typeof response.data.result === 'undefined') { 
          return response; 
         } 

         if(response.status && response.status.code === 401) { 
          alert('token wordt verwijderd'); 
         } 

         if(response.data && response.data.result.token && response.data.result.token.length > 10) { 
          $cookies.put('jwt-token', 'Bearer ' + response.data.result.token); 
         } 
         return response; 
        } 
       }; 
      }); 
     }]); 

它不工作。如果我在請求/響應之間放置了幾個警報框,它就可以工作。我怎樣才能解決這個問題?

回答

1

您正在設置headers變量的Authorization屬性,然後返回request

request.headers = headers; 
return request; 

這應該解決問題。

幾件事情,但:

  • 不要把Bearer在cookie本身,只是將它添加到你的頭在每次請求,它更優雅。
  • 我不確定它是否有意,但你真的不應該在每個請求上返回一個令牌對象。如果這是預期的行爲,那麼我的不好!
+0

如果您打算定期更新其中的信息,例如只要用戶處於活動狀態就想延長令牌的有效性,那麼在每次調用時都返回一個新令牌是有意義的。 –

+0

這只是一個意見。雖然我認爲這是延長會議的最佳方式。顯然你的其他要求(雙關意圖)是真的! :) –