2016-07-11 28 views
4

我想授权使用jwt令牌的用户。但是,如果我刷新页面,那么jwt会丢失,并且在后续对服务器的请求中不会发送令牌。我使用localstorage来存储令牌和后端的spring-mvc。 这是我创建的服务:如何在angularjs应用程序中防止页面刷新时丢失jwt令牌?

'use strict'; 
angular.module('authentication') 
.factory('AuthenticationService', ['$http', '$localStorage',  
'$rootScope','$route', '$q', function($http, $localStorage, $rootScope, 
$route, $q){ 
var service = {loggedInUser: function(){ 
return $q.when($rootScope.user) 
}}; 
service.Login = Login; 
service.Logout = Logout; 

return service; 

function Login(username, password, callback){ 
    $http.post('http://172.16.0.26:7001/Taisys_Server_Current/auth', 
    {username:username, password:password}) 
    .success(function (response){ 
     if(response.token){ 
     $localStorage.currentUser = {username:username,  
     token:response.token}; 

     $http.defaults.headers.common.Authorization = 'Bearer' + response.token; 

     $rootScope.user= $localStorage.currentUser; 

     $rootScope.token = response.token; 


     callback(true); 
     } 
     else{ 
     callback(false); 
     } 
    }); 
} 
function Logout(){ 
    delete $localStorage.currentUser; 
    $http.defaults.headers.common.Authorization = ''; 
    $route.reload(); 
    } 
    }]); 
+0

饼干/网络存储(localStorage的/的sessionStorage) –

+1

localstore不会被清除的。页面刷新。您是如何在$ http请求上设置令牌的? –

回答

1

你必须使用这个,如果你已经登录

$http.defaults.headers.common.Authorization = 'Bearer' + $localStorage.currentUser.token; 
+0

我试过了,但没有工作。它在刷新页面后仍然丢失。并且在刷新页面后不会随后发出请求。 – darkknight

+0

$ http.defaults.headers.common.Authorization在页面刷新后将会丢失。您必须在页面重新加载时进行设置。我在运行块中使用它。 –

相关问题