2016-11-16 36 views
0

我使用jquery。为每个请求添加标题并重定向

当用户登录时,我想在头部有授权信息。

时好像我们做一个重定向喜欢和大家做一个Ajax调用后,头不存在了

的原因吗?

我的代码

$('#loginform').submit(function(event) { 

    event.preventDefault(); 
    var header = btoa($('#username').val() + ":" + $('#password').val()); 

    $.ajaxSetup({ 
    headers: { 
     "Authorization": "Basic " + header 
    } 
    }); 


    $.ajax({ 
    timeout: 1000, //check if really needed 
    type: 'get', 
    url: '/rest/members/1', 
    headers: { 
     "Authorization": "Basic " + header 
    } 

    }).done(function(data, textStatus, jqXHR) { 

    $("#error-login-form").addClass("hidden"); 
    var deferredUsername = getNameByUsername(); 

    $.when(deferredUsername).then(function() { 
     window.location = "main.html"; 
    }); 

    }).fail(function(jqXHR, textStatus) { 

    if (jqXHR.status == 401) { 
     $("#error-login-form").removeClass("hidden"); 
    } 
    }); 
}); 
+0

你就错了,你不把用户名和密码在头,并检查它在每次请求时,都会检查一次*,然后使用带有随机ID或类似cookie的cookie来跟踪用户。 – adeneo

+0

看起来好像不那么糟糕https://zinoui.c​​om/blog/ajax-basic-authentication –

+0

您在注释中发布的示例使用了[使用PHP进行HTTP身份验证](http://php.net/manual/en/features。 http-auth.php)与登录页面不同,登录页面将登录信息发送到登录脚本,该登录脚本将设置cookie(如@ adeneo所述)或验证成功时的会话变量。目前还不清楚你在这里真正需要什么。但是,当然,您在问题中发布的脚本无法成功。 –

回答

0

使用jQuery,你可以在beforeSend使用它。像

     beforeSend: function (xhr) { 
         var authorizationCode = $.base64('encode', 'userName' + ":" + 'password'); 
         xhr.setRequestHeader ("Authorization", "Basic " +authorizationCode); 
         xhr.setRequestHeader ("Content-Type", "application/json;charset=utf-8"); 

        } 

作为每jQuery文档为beforeSend

A-预先请求的回调函数能够被用来修改jqXHR(jQuery中1.4.x中,XMLHTTPRequest的)对象被发送之前。使用它来设置自定义标题等.jqXHR和设置对象作为参数传递。这是一个Ajax事件。在beforeSend函数中返回false将取消请求。从jQuery 1.5开始,beforeSend选项将被调用,而不管请求的类型如何。

0

尝试

var header = btoa($('#username').val() + ":" + $('#password').val()); 
$.cookie('cookie_authorization', header); 

和你Ajax调用,加

headers: { 
     "Authorization": "Basic " + $.cookie('cookie_authorization') 
} 
相关问题