我正在尝试实现一个使用 DHIS 2 API 的 javascript 应用程序。我花了一整天时间尝试使用 Jquery 进行身份验证。
API 表示 ( https://www.dhis2.org/doc/snapshot/en/user/html/ch32s02.html ) 您需要使用 base 64 身份验证。我试图在 Jquery 中实现它,但遇到了跨域问题。我曾尝试使用 DHIS 2 演示 ( https://apps.dhis2.org/dev/ ) 进行身份验证,但没有成功。然后我在我的本地计算机上设置了一个本地副本,但我仍然遇到同样的问题,因为 DHIS 2 在不同的端口上运行。
我已经尝试过 jsonp 和 CROS,但都是徒劳的。
这是我目前正在尝试的代码
$(function(){
var base_url = "http://apps.dhis2.org/demo/";
var login = 'dhis-web-commons-security/login.action?authOnly=true';
var current_user_url = 'api/users.json';
var params = {
'j_username':'admin',
'j_password':'district'
};
function base_64_auth(user,password) {
var tok = user + ':' + password;
var hash = Base64.encode(tok);
return "Basic " + hash;
}
var auth = base_64_auth('admin','district');
$.ajax({
url : base_url+login,
data : params,
type : 'POST',
dataType : 'text',
crossDomain : true,
xhrFields : {
'withCredentials':true
},
beforeSend : function(req) {
req.setRequestHeader('Authorization',auth);
},
success : function(data){
console.log('authentification succeded');
alert('success');
//userInfo();
},error : function(xhr,type,msg) {
console.log(xhr.responseText);
console.log(type);
console.log(msg);
}
});
)};
我正在使用一个简单的 base64 编码库 www.webtoolkit.info/javascript-base64.html#.U9_O2XVdWkA
检查控制台我看到这个错误:
XMLHttpRequest 无法加载 http://apps.dhis2.org/demo/dhis-web-commons-security/login.action?authOnly=true
。请求被重定向到 'http://apps.dhis2.org/demo/dhis-web-commons/security/login.action?failed=true'
,这是不允许跨域请求的需要预检。
如果有人曾经使用过该 API,我将不胜感激他的帮助,或者如果您知道任何其他方式(包括其他语言)我可以与 API 对话,我可能会去尝试。
非常感谢。
最佳答案
跨域请求通常会被浏览器拦截。我自己正在使用 DHIS2 API 作为小组项目的一部分,我们通过运行以下命令在 chrome 中禁用同源策略来解决这个问题:
google-chrome --disable-web-security
请注意,您仍然需要验证对演示服务器的请求,而且这个解决方案在任何方面都不是理想的。我猜最好的方法是在本地部署服务器并将所有文件放在服务器上,以便请求发生在与服务器相同的域中。另请注意,在 chrome 中禁用网络安全时,使用其他浏览器浏览邮件、facebook 等可能是个好主意。
关于javascript - 将 DHIS 2 API 与 Jquery 跨域问题一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25126722/