2016-03-09 51 views
4

我開發了一個使用Angular JS的Spring Web應用程序。對於當前項目,客戶端身份驗證使用Cookie。 在瞭解了優勢JWT之後,我重寫了使用JWT(Json Web令牌)的應用程序認證。AngularJS使用JWT記住我的功能Auth

我的問題是如何處理使用JWT在AngularJS中使用Cookies功能或Laravel支持「Rember Me」功能

如果你們中的任何一位專家都可以分享我的建議或示例代碼。這將是非常有幫助的。我試圖搜索互聯網,但沒有得到一個示例實現來引用。

謝謝。

+2

可以存儲裏面的localStorage –

+0

您的令牌,如果你能分享我的一些代碼樣片。會很有幫助。 –

+2

'localStorage.setItem(「jwt」,angular.toJson(yourToken));' –

回答

3

在客戶端存儲智威湯遜的選項之一可能是window.localStorage,它存儲沒有過期日期的數據。 而在這之後,每個$http請求(認證頭)您發送此令牌使用攔截器像下面的服務器,

angular.module('myApp').factory('authInterceptor', ['$q', function ($q) { 
     return { 
      request: function (config) { 
       config.headers = config.headers || {}; 
       if (config.headers.skipAuthorization === false) { 
        var token = localStorage.getItem('authenticationToken'); 
        if (token != null) { 

         config.headers.Authorization = token; 
        } 
       } 
       return config; 
      }, 
      response: function (response) { 
       if (response.headers("Authorization") != undefined || response.headers("Authorization") != '') { 
        localStorage.setItem('authenticationToken', response.headers("Authorization")); 
       } 
       return response; 
      }, 
      responseError: function (rejection) { 
       if (rejection.status === "401") { 
        localStorage.removeItem('authenticationToken'); 
       } 
       return $q.reject(rejection); 
      } 
     }; 
    } ]); 

    angular.module('myApp').config(['$httpProvider', function ($httpProvider) { 
     $httpProvider.interceptors.push('authInterceptor'); 
    } ]); 

並與您希望此令牌將被髮送到服務器的每個請求,設置skipAuthorization:false在標題爲,

$http({ 
.... 
headers:{skipAuthorization:false} 
}).then(....) 
+0

但是'JWT'已經到期了。我們可以將標記存儲在'localStorage'中,但是當我們發送到服務器時,'JWT'會檢查到期。任何想法? –

+0

是的,在服務器上,當我們解碼JWT並驗證它時,它會在令牌過期時發生錯誤 –