我的用户输入第三方服务的用户名和密码。我对该服务进行ajax调用以验证它们。问题是,如果他们输入错误的用户名和密码,浏览器(至少是firefox)将显示“需要身份验证”对话框。如果他们然后在该对话框中输入正确的用户名和密码,我的ajax调用将返回“成功”,并且看起来他们输入的原始用户/传递是正确的,而不是(因为他们更改了它)。 / p>
有没有办法抑制这个对话框(所以我可以让我的服务告诉他们纠正他们的用户/通行证)或以某种方式获取用户在浏览器对话框中输入的正确用户名和密码?这是一个firefox扩展..所以我确定有一些方法可以从请求中获取正确的传递/登录..但如果有一个更简单的方法通过javascript会很好。
jQuery.ajax({
type: "GET",
dataType: "xml",
url: endpoint,
username: username,
password: password,
success: function(data,status) {
// Do something
},
error: function(XMLHttpRequest, textStatus, errorThrown){
alert(errorThrown);
}
});
答案 0 :(得分:1)
而不是网址字符串为“http://blah.com”,请将其设为“http://user:password@blah.com”
// Note that you might need to trim http:// out of endpoint first
url: 'http://' + username + ':' + password + '@' + endpoint,
答案 1 :(得分:1)
我通过在浏览器和需要身份验证的服务(在我的例子中是一个java servlet)之间放置一个代理来解决这个问题。浏览器将AJAX请求发送到servlet,servlet将请求转发给服务,然后发回服务的响应,省略“WWW-Authenticate”标头。您的浏览器应用。相应地处理HTTP 200或401响应代码。
类似地,代理总是返回200,其中json响应指示转发请求的结果。通过这种方式,您可以辨别代理失败与服务响应之间的区别。
您可能需要处理的一件棘手的事情 - 如果远端服务使用set-cookie标头响应,比如因为它为您的客户端创建了一个会话,那么您(至少)有两条可能的路径。
答案 2 :(得分:0)
没有jquery(在IE中不起作用,但对于firefox扩展来说没问题):
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://example.com", true, "username", "password");
xhr.onreadystatechange = function(){
if(this.readyState == 4){
if(this.status == 200){
alert("we got a response");
}
}
}
xhr.send();
答案 3 :(得分:0)
如何不使用HTTP身份验证?使用带有cookie的标准登录,或者只是将用户提供给脚本的用户名/密码POST,并根据用户数据库检查详细信息。
答案 4 :(得分:-1)
你无法在IE或Firefox中执行此操作,并且出于安全原因,您永远无法使用javascript。没有浏览器设置可以避免用户提示进行http身份验证。当您有50张图像都需要http身份验证时,这会变得非常烦人。