2015-12-07 67 views
0

我正在研究一個Web應用程序,其中我正在嘗試實現用於安全性的jwt身份驗證。我將生成的令牌發送到客戶端並將其保存在標題中,但是當我發送http請求時,頭部在服務器端顯示爲空。jsonwebtoken中標題中的標記設置和驗證

這是服務器端代碼部分登錄模塊

  var profile = { 
       name:rows[0].name, 
       email:rows[0].email, 
       role:rows[0].role_id 
      }; 
      var token = jwt.sign(profile,'shhhhhhared-secret',{expiresInMinutes: 60*5 }); 

      res.json({ 
       success: true, 
       user: rows[0], //userobject 
       token: token 
      }); 

這是我們在sesssionstorage中設置響應的控制器部分。

dbServices.UserAuthenticate($scope.email, 
        $scope.password).then(function(response) { 
       $rootScope.showLoader = false; 
       if (response.data.success) { 
        var session_data = { 
         'token':response.data.token, 
         'user':{ 
          'name':response.data.user.name, 
          'role':response.data.user.role_id, 
          'email':response.data.user.email 
         } 
        }; 
        sessionStorage.sessionData = JSON.stringify(session_data); 
        $location.path('/'); 
       } else { 
        $scope.msg = 'Invalid Email or Password!' 
       } 
      }) 

這是配置文件我在哪裏設置頁眉

App.factory('authInterceptor', ['$rootScope', '$q', '$window', 
function($rootScope, $q, $window) { 
    return { 
     request: function(req) { 
      req.headers = req.headers || {}; 
      if (sessionStorage.sessionData.token) { 
       req.headers.Authorization = 'Bearer ' + sessionStorage.sessionData.token; 
      } 
      return req; 
     }, 
     response: function(response) { 
      if (response.status == 401) { 
       console.log('header auth 401 login'); 
       $window.location = '/login'; 
      } 

      return response || $q.when(response); 
     } 
    } 
} 
]); 

App.config(function ($httpProvider) { 
    $httpProvider.interceptors.push('authInterceptor'); 
}); 

我沒有得到什麼在這個去錯了。有人能幫助我嗎?

+0

貌似sessionStorage的是未定義....您可能需要注入它。 – Gary

回答

0

您在保存令牌時做了JSON.stringify(session_data),但您在讀取令牌之前沒有做到JSON.parse(sessionStorage.sessionData)

嘗試改變

if (sessionStorage.sessionData.token) { 
    req.headers.Authorization = 'Bearer ' + sessionStorage.sessionData.token; 
} 

var session_data = JSON.parse(sessionStorage.sessionData); 
if (session_data.token) { 
    req.headers.Authorization = 'Bearer ' + session_data.token; 
}