如何删除角度的基本身份验证?

时间:2015-05-02 09:58:18

标签: angularjs cordova ionic-framework ionic

您正在使用基本身份验证进行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 ');
                    });

                }

这段代码对我来说很好。但我的问题是如果一个用户使用用户名和密码进行了操作。然后注销后,另一个用户尝试使用不同的用户名和密码登录将使之前的用户进入。如何清除标头认证数据?

3 个答案:

答案 0 :(得分:0)

您可以使用

重新定义标题
$http.defaults.headers.common['Authorization'] = 'Basic ' + Base64.encode(newUsername + ':' + newPassword)

答案 1 :(得分:0)

似乎,

未替换Authorization标题
  1. 用户退出
  2. 以其他用户身份登录
  3. 登录 - 每次用户登录时都会调用

    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, */*"};