2014-09-22 52 views
0

我有两个api一个用于登录,另一个用于注销,并且在succcessfulll登录时我得到acesstoken,并且基于acesstoken,我必须通过在头中传递acesstoken来注销。如何在使用angularJS的服务头中的localstorage中传递值存储?

所以对于注销我做什么,我存储在localStorage的acesstoken值,并通过在头,但我得到的错误

这里是services.js“的accessToken无效”:

angular.module('server', []) 
.factory('api', function($http) { 
    var token = localStorage.AccessToken; 
    console.log(token); 
    var server = "http://myapi-nethealth.azurewebsites.net"; 
     return { 
      //Login 
      login : function(formdata) { 
       return $http({ 
        method: 'POST', 
        url: server + '/Users/Login', 
        data: $.param(formdata), 
        headers: { 'Content-Type' : 'application/x-www-form-urlencoded'}, 
       }); 
      }, 
      logout : function() { 
       return $http({ 
        method: 'POST', 
        url: server + '/Users/Me/Logout', 
        headers: { 'Content-Type' : 'application/x-www-form-urlencoded', 'Authorization' : 'token ' + token}, 

        /*headers: { 'Content-Type' : 'application/json', 'Authorization' : 'token ' + token},*/ 
       }).success(function (data, status, headers, config){ 
        alert(JSON.stringify(status)); 
       }); 
      } 
     }; 

    }); 

//Controller.js ..

ctrl.controller('logout', function($scope, $window, $state, api) { 
    $scope.logout = function() { 
     api.logout() 
      .success(function(data) { 
       console.log(data); 
       $scope.response = data; 
       $state.go('home'); 
       }) 
      .error(function(data) { 
       console.log(data); 
       $scope.response = data; 
      }); 
    } 
}); 
ctrl.controller('search', function($scope, $state) { 
       $scope.search = function() { 
      $state.go('clinic-list'); 
      }; 

    }); 
ctrl.controller('clinicCtrl', function($scope, $state, $window, api) { 
    $scope.formData = {}; 
    $scope.clinicCtrl = function() { 
    /*$scope.loading = true;*/ 
     api.login($scope.formData) 
      .success(function(data, status) { 
       console.log(data); 
       $scope.response = data; 
       if (data.hasOwnProperty('AccessToken') && data.AccessToken.length > 5) { 
        $state.go('home'); 
        window.localStorage['AccessToken'] = angular.toJson(data.AccessToken); 
        var accessData = window.localStorage['AccessToken']; 
        console.log(accessData); 
        } else { 

         $state.go('login'); 
        } 
       /*$scope.loading = false;*/ 
      }) 
      .error(function(data) { 
       console.log(data); 
       $scope.response = data; 
       $window.alert($scope.response.Message); 
       console.log($scope.response.Message); 
     }); 
    } 

}); 

请告诉我,我怎么能做到这一点....

+0

你怎么保存的accessToken定制? – 2014-09-22 08:41:17

+0

window.localStorage ['AccessToken'] = angular.toJson(data.AccessToken);,我通过使用这行代码保存... – 2014-09-22 08:44:06

回答

0
angular.module('server', []).factory('authInterceptor',function($q,$location) { 
    return { 
     request: function(config) { 
      config.headers = config.headers || {}; 
      if(localStorage.AccessToken) { 
       config.headers.AccessToken = localStorage.AccessToken; 
      } 
      config.headers.requestResourse = $location.$$url; 
      return config; 
     }, 
     responseError: function(response) {    
      return $q.reject(response); 
     } 
    } 
}).config(function($httpProvider) { 
     $httpProvider.interceptors.push('authInterceptor'); 
    })..factory('api', function($http) { 
var token = localStorage.AccessToken; 
console.log(token); 
var server = "http://myapi-nethealth.azurewebsites.net"; 
    return { 
     //Login 
     login : function(formdata) { 
      return $http({ 
       method: 'POST', 
       url: server + '/Users/Login', 
       data: $.param(formdata), 
       headers: { 'Content-Type' : 'application/x-www-form-urlencoded'}, 
      }); 
     },............... 

这将令牌附加到所有请求,U获得效应初探后,你可以重新设置令牌控制器:) 根据你的变量

+0

如何在“标题”中传递令牌...我能够获得令牌值,但我必须通过它在标头...... – 2014-09-22 08:52:20

+0

你是否只需要令牌只有一个请求? – 2014-09-22 08:57:00

+0

是的,因为这个标记值每次都在登录时发生变化....要注销登录用户谁在loffed我必须使用这个标记值的头是通过登录API返回.....我不知道我怎么能在标题中传递这个标记值,我试过了,但是我得到一个错误“AccessToken无效”...看到我的代码,我在标头中传递了标记.... – 2014-09-22 09:06:58

相关问题