您正在使用基本身份验证进行webservie集成。
$http.defaults.headers.common['Authorization'] = 'Basic ' + Base64.encode(Username + ':' + password);
$http({method: 'GET', url: 'http:url.com'}).
success(function(data) {
if(data=='' || data==null || data=='undefined'){
var alertPopup = $ionicPopup.alert({
title: 'Info!',
template: 'Invalid Password, or no user found with this Email Address'
});
alertPopup.then(function(res) {
console.log('Invalid Password, or no user found with this Email Address ');
});
}
这段代码对我来说很好。但我的问题是如果一个用户使用用户名和密码进行了操作。然后注销后,另一个用户尝试使用不同的用户名和密码登录将使之前的用户进入。如何清除标头认证数据?
答案 0 :(得分:0)
您可以使用
重新定义标题$http.defaults.headers.common['Authorization'] = 'Basic ' + Base64.encode(newUsername + ':' + newPassword)
答案 1 :(得分:0)
时 未替换
Authorization
标题
登录 - 每次用户登录时都会调用
function setCredentials(username, password) {
$http.defaults.headers.common['Authorization'] = 'Basic ' + Base64.encode(username + ':' + password);
};
退出 - 在用户退出时调用此方法
function clearCredentials() {
$http.defaults.headers.common.Authorization = 'Basic ';
};
以上摘要简化了本教程 - AngularJS Basic HTTP Authentication Example 。我建议阅读它
请注意,使用基本的http身份验证不安全,因为每个请求上传递的密码没有加密!
作为替代方案,您可以使用会话将基本的http身份验证更改为服务器端身份验证(使用您的服务器注释,我会将您链接到示例)
如果您仍然决定保留基本的http身份验证,请至少使用HTTPS
!
答案 2 :(得分:0)
我发现这个解决方案有效:
启动注销时,首先尝试向假用户发出错误请求,以丢弃当前缓存的凭据。
我有这个功能来处理请求(它使用jquery' s $.ajax
和禁用的异步调用):
function authenticateUser(username, hash) {
var result = false;
var encoded = btoa(username + ':' + hash);
$.ajax({
type: "POST",
beforeSend: function (request) {
request.setRequestHeader("Authorization", 'Basic ' + encoded);
},
url: "user/current",
statusCode: {
401: function () {
result = false;
},
200: function (response) {
result = response;
}
},
async: false
});
return result;
}
因此,当我尝试将用户注销时,会发生这种情况:
//This will send a request with a non-existant user.
//The purpose is to overwrite the cached data with something else
accountServices.authenticateUser('logout','logout');
//Since setting headers.common.Authorization = '' will still send some
//kind of auth data, I've redefined the headers.common object to get
//rid of the Authorization property
$http.defaults.headers.common = {Accept: "application/json, text/plain, */*"};