当我运行AngularJS登录我的后端时,我遇到了内部问题。我可以通过异常处理解决这个问题,但真正的问题仍然存在。我正在尝试使用基本身份验证方法,因此我在客户端代码中调用它:
function Login(username, password) {
var authdata = CreateLoginHeader(username, password);
var config = {
withCredentials: true,
headers: { 'Authorization': authdata, 'Content-Type', 'application/json' }
};
$http.post('http://brain-ratmap.rhcloud.com/api/v1/brain/study/login', config).then(SuccessLogin, ErrorLogin);
}
function CreateLoginHeader(username, password) {
var authdata = btoa(username + ':' + password);
return 'Basic uIg' + authdata;
}
当我解雇时,我在JS中遇到了这个错误:
XMLHttpRequest无法加载http://XXXX/api/v1/login。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://YYYY'因此不允许访问。响应的HTTP状态代码为500。
就像我说的,我知道如果我会处理我的异常并仍然会返回一个响应,那么这个POST方法应该可行。但我要问的是,为什么我的基本身份验证不起作用 - 当我在服务器端收到请求时,标题中的Authenticate值不包含任何其他内容" Basic&#34 ;.
这也是我对所有标题值的记录输出[Key;值的大小; 1个索引的值]:
2016-03-05 13:52:50,610 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:接受 2016-03-05 13:52:50,612 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,612 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)应用程序/ json,text / plain, / 2016-03-05 13:52:50,612 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:Accept-Encoding 2016-03-05 13:52:50,612 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,613 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)gzip,deflate 2016-03-05 13:52:50,615 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:Accept-Language 2016-03-05 13:52:50,615 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,616 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)en-US,en; q = 0.8
2016-03-05 13:52:50,616 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:授权
2016-03-05 13:52:50,617 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题值为1
2016-03-05 13:52:50,618 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题值包含在第一个索引Basic < / p>
2016-03-05 13:52:50,620 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:连接 2016-03-05 13:52:50,621 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,629 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)Keep-Alive 2016-03-05 13:52:50,630 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:Content-Length 2016-03-05 13:52:50,630 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,630 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)90 2016-03-05 13:52:50,630 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:Content-Type 2016-03-05 13:52:50,630 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,631 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)application / json; charset = UTF-8 2016-03-05 13:52:50,631 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:主机 2016-03-05 13:52:50,631 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,631 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)brain-ratmap.rhcloud.com 2016-03-05 13:52:50,631 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:Origin 2016-03-05 13:52:50,631 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,631 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)http://rat-investigation.rhcloud.com 2016-03-05 13:52:50,632 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:Referer 2016-03-05 13:52:50,632 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,632 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)http://rat-investigation.rhcloud.com/ 2016-03-05 13:52:50,632 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:User-Agent 2016-03-05 13:52:50,632 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,633 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)Mozilla / 5.0(Windows NT 10.0; WOW64)AppleWebKit / 537.36(KHTML,和Gecko一样) )Chrome / 48.0.2564.116 Safari / 537.36 2016-03-05 13:52:50,633 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:X-Client-IP 2016-03-05 13:52:50,633 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,633 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)70.75.185.14 2016-03-05 13:52:50,633 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:X-Forwarded-For 2016-03-05 13:52:50,633 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,634 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)70.75.185.14 2016-03-05 13:52:50,634 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:X-Forwarded-Host 2016-03-05 13:52:50,634 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,634 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)brain-ratmap.rhcloud.com 2016-03-05 13:52:50,634 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:X-Forwarded-Port 2016-03-05 13:52:50,636 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,636 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)80 2016-03-05 13:52:50,636 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:X-Forwarded-Proto 2016-03-05 13:52:50,637 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,637 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)http 2016-03-05 13:52:50,637 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:X-Forwarded-Server 2016-03-05 13:52:50,637 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,638 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)brain-ratmap.rhcloud.com 2016-03-05 13:52:50,638 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:X-Request-Start 2016-03-05 13:52:50,638 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,639 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)t = 1457203970487695
答案 0 :(得分:0)
我认为我的Web服务有效的另一个原因是,因为登录方法被调用并执行。使用我的日志,我可以肯定地说我的代码正在处理中。
这是我的整个XHR来自开发人员工具:
请求网址:http://XXXX/login 请求方法:POST 状态代码:403禁止 远程地址:XX.XX.XX.XX:80
响应标题
请求标题
我可以看到Authorization标头值仅包含“Basic”。这就是我在后端没有得到任何东西的原因。另外,我知道拥有Access-Control-Allow-Origin:*并不是一个好习惯,但出于测试目的,这很好。后来我会改变它。从我的调查中我发现允许的方法不必包含OPTIONS,你只需捕获它并返回2XX响应,我正在做。我按照this教程中的描述实现了我的后端。
之前我遇到过预检问题,但我通过这样做here解决了这个问题。
答案 1 :(得分:0)
我发现了问题,正如我所怀疑的,问题是客户端而不是服务器。我没有以正确的方式使用$ http.post方法。我必须使用它,就像通过调用$ http.post(url,data,[config])在文档中显示的那样 - 配置包含我需要的所有头文件。但是因为我没有设法像这样调用函数并传入配置(我用谷歌搜索但我没有找到一种方法让数据为空而没有错误)。这就是为什么我只为所有http调用设置'Authorization'标题:
var authdata = CreateLoginHeader(username, password);
$http.defaults.headers.common.Authorization = authdata;
$http.post('http://brain-ratmap.rhcloud.com/api/v1/brain/study/login').then(SuccessLogin, ErrorLogin);
至少这允许我发送一个帖子请求,我在回复中找回了我的授权令牌。