我正在尝试将登录服务中的令牌存储在变量中,以便稍后检索它并将其添加到标头中,以便能够从API中使用更多服务。我能够登录并获取令牌,但是当我试图从我存储它的变量中取回它时它没有被保存,不太确定我做错了因为没有语法错误。任何帮助表示赞赏。这是我的代码示例:
services.js
.service('loginService', function($http, $ionicPopup, $window) {
var token = '';
return {
login: function(username, password, practicePin){
var url = 'https://localhost/login';
var parameter = JSON.stringify({username:username, password:password, pin:practicePin});
$http.post(url, parameter).then(function(response){
token = response.headers()['token'];
var alertPopup = $ionicPopup.alert({
title: 'Welcome ' + username,
subTitle: token
});
alertPopup.then(function(res) {
$window.location.href = 'home.html';
});
}).
error(function(data, status, headers, config) {
$ionicPopup.alert({
title: 'BAD CREDENTIALS'
});
})
},
getToken: function(){
return token;
}
}
})
此时,令牌将保存在变量as the picture shows
中但是当我尝试从控制器返回令牌时,它是空的。
.controller('FindSlotCtrl', function($scope , $ionicPopup, $state, loginService) {
$scope.login = function(username, password, practicePin) {
loginService.login(username, password, practicePin);
};
$scope.token = function(){
$ionicPopup.alert({
title: 'TOKEN -> ' + loginService.getToken()
});
};
}
Here's the second alert并且令牌变量似乎是空的,我试图存储在一个数组中,第一次执行时,数组的.length等于1,但是在第二次警告时它会显示给我长度= 0。
我还尝试设置并从另一个服务/工厂获取令牌并将其注入loginService但是我得到了相同的结果。
答案 0 :(得分:0)
在第一个警报中,您可以看到令牌,因为您的令牌是从服务器检索的。稍后调用getToken()时,它会返回一个未定义的值,因为该标记是未定义的。
为了能够重用令牌,让服务中的登录功能返回令牌,如下所示:
login: function(username, password, practicePin){
var url = 'https://localhost/login';
var parameter = JSON.stringify({username:username, password:password, pin:practicePin});
$http.post(url, parameter).then(function(response){
return response.headers()['token'];
}).
error(function(data, status, headers, config) {
$ionicPopup.alert({
title: 'BAD CREDENTIALS'
});
})
}
然后,在您的控制器中保存令牌:
$scope.login = function(username, password, practicePin) {
$scope.token = loginService.login(username, password, practicePin);
};
然后,您可以通过这种方式提醒它:
$scope.alertToken = function(){
$ionicPopup.alert({
title: 'TOKEN -> ' + $scope.token
});
};