ionic v1 在服务中存储令牌不起作用 angularjs
ionic v1 storing token in service not working angularjs
我正在尝试将来自登录服务的令牌存储在一个变量中,稍后检索它并将其添加到 header 以便能够使用来自 [=33= 的更多服务].我能够登录并获取令牌,但是当我尝试从我存储它的变量中取回它时它没有被保存,不太确定我做错了什么,因为没有语法错误。任何帮助表示赞赏。这是我的代码示例:
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;
}
}
})
此时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 并且 token 变量似乎是空的,我试图存储在一个数组中,我第一次执行时数组的长度等于 1,但是在第二次警报时它会告诉我长度 = 0.
我还尝试设置并从另一个 service/factory 获取令牌并将其注入 loginService,但无论哪种方式我都得到了相同的结果。
在第一个警报中,您可以看到令牌,因为您的令牌是从服务器检索的。当您稍后调用 getToken() 时,它 return 是一个未定义的值,因为令牌是未定义的。
为了能够重复使用令牌,请在您的服务中使用登录功能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){
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.js
.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'
});
})
}
}
})
controllers.js
.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
});
};
})
登录后第二屏图片
我正在尝试将来自登录服务的令牌存储在一个变量中,稍后检索它并将其添加到 header 以便能够使用来自 [=33= 的更多服务].我能够登录并获取令牌,但是当我尝试从我存储它的变量中取回它时它没有被保存,不太确定我做错了什么,因为没有语法错误。任何帮助表示赞赏。这是我的代码示例:
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; } } })
此时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 并且 token 变量似乎是空的,我试图存储在一个数组中,我第一次执行时数组的长度等于 1,但是在第二次警报时它会告诉我长度 = 0.
我还尝试设置并从另一个 service/factory 获取令牌并将其注入 loginService,但无论哪种方式我都得到了相同的结果。
在第一个警报中,您可以看到令牌,因为您的令牌是从服务器检索的。当您稍后调用 getToken() 时,它 return 是一个未定义的值,因为令牌是未定义的。
为了能够重复使用令牌,请在您的服务中使用登录功能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){
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.js
.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' }); }) } } })
controllers.js
.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 }); }; })
登录后第二屏图片