ionic v1在服务中存储令牌不工作angularjs
我试图将登录服务中的令牌存储在变量中,以便稍后检索并将其添加到头中,以便能够使用API中的更多服务。我可以登录并获取令牌,但当我试图从存储它的变量中获取它时,它没有被保存,因为没有语法错误,所以不太确定我做错了什么。感谢您的帮助。下面是我的代码示例:ionic v1在服务中存储令牌不工作angularjs,angularjs,cordova,ionic-framework,angularjs-service,angularjs-factory,Angularjs,Cordova,Ionic Framework,Angularjs Service,Angularjs Factory,我试图将登录服务中的令牌存储在变量中,以便稍后检索并将其添加到头中,以便能够使用API中的更多服务。我可以登录并获取令牌,但当我试图从存储它的变量中获取它时,它没有被保存,因为没有语法错误,所以不太确定我做错了什么。感谢您的帮助。下面是我的代码示例: services.js .service('loginService', function($http, $ionicPopup, $window) { var token = ''; return { login: funct
.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;
}
}
})
.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()
});
};
}
第一次执行时,令牌变量似乎是空的,我试图存储在数组中。数组的长度等于1,但在第二次警告时,它会显示length=0
我还尝试从另一个服务/工厂设置并获取令牌,并将其注入loginService,但我同样得到了相同的结果。在第一个警报中,您可以看到令牌,因为您的令牌是从服务器检索的。稍后调用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
});
};
在第一个警报中,您可以看到令牌,因为您的令牌是从服务器检索的。稍后调用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
});
};
最后,我通过使用$window.localStorage获得了我想要的结果,这可能不是解决问题的最佳方法,但至少我可以让它工作。下面是代码示例:
.service('loginService', function($http, $ionicPopup, $window) {
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){
var token = response.headers()['token']
$window.localStorage['token'] = token;
var alertPopup = $ionicPopup.alert({
title: 'Welcome ' + username
});
alertPopup.then(function(res) {
$window.location.href = 'home.html';
});
}).
error(function(data, status, headers, config) {
$ionicPopup.alert({
title: 'BAD CREDENTIALS'
});
})
}
}
})
.controller('FindSlotCtrl', function($scope, $window, $ionicPopup,loginService) {
$scope.token = $window.localStorage['token'];
$scope.login = function(username, password, practicePin) {
loginService.login(username, password, practicePin);
};
$scope.tokenAlert = function(){
$ionicPopup.alert({
title: $scope.token
});
};
})
登录后第二个屏幕的图片最后,我通过使用$window.localStorage获得了我想要的结果。localStorage可能不是解决这个问题的最佳方法,但至少我可以让它工作。下面是代码示例:
.service('loginService', function($http, $ionicPopup, $window) {
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){
var token = response.headers()['token']
$window.localStorage['token'] = token;
var alertPopup = $ionicPopup.alert({
title: 'Welcome ' + username
});
alertPopup.then(function(res) {
$window.location.href = 'home.html';
});
}).
error(function(data, status, headers, config) {
$ionicPopup.alert({
title: 'BAD CREDENTIALS'
});
})
}
}
})
.controller('FindSlotCtrl', function($scope, $window, $ionicPopup,loginService) {
$scope.token = $window.localStorage['token'];
$scope.login = function(username, password, practicePin) {
loginService.login(username, password, practicePin);
};
$scope.tokenAlert = function(){
$ionicPopup.alert({
title: $scope.token
});
};
})
登录后第二个屏幕的图片它似乎没有按预期工作,即使我从标题返回令牌$ionicPopup.alert({title:response.headers()['aerona-auth-token']});返回response.headers()['aerona-auth-token'];警报显示令牌,但当我尝试在变量上设置它时,它在控制器上显示undefined:$scope.login=function(username,password,practicePin){$scope.token=loginService.login(username,password,practicePin);$ionicPopup.alert({title:'-'+$scope.token+'-'});它似乎没有像预期的那样工作,即使我从标题返回令牌$ionicPopup.alert({title:response.headers()['aerona-auth-token']});返回response.headers()['aerona-auth-token'];警报显示令牌,但当我尝试在变量上设置它时,它在控制器上显示undefined:$scope.login=function(username,password,practicePin){$scope.token=loginService.login(username,password,practicePin);$ionicPopup.alert({title:'-'+$scope.token+'-'});