我遇到了一个奇怪的问题,我构建的应用程序使用Angular与支持CORS的API通信。网址类似于......
网站:www.mysite.com API:api.mysite.com
在我第一次访问该网站时,我被发送到登录页面。当我输入有效凭据并提交时,我在Chromes网络控制台中获得以下示例网络请求...
api.mysite.com/login OPTIONS 200
www.mysite.com/? GET 200
api.mysite.com/login POST (cancelled)
CORS预检选项请求成功,但登录的POST被取消。我怀疑两者之间的GET可能会导致这种情况,我不知道它来自哪里。我没有明确地发送它。 Angular可以这样做吗?
此请求失败,并重新显示登录表单。当我尝试使用相同的凭据再次登录时,它在第一次尝试后工作,并且控制台看起来像......
api.mysite.com/login OPTIONS 200
api.mysite.com/login POST 200
我使用Angular HTTP拦截器用API密钥装饰所有请求,我在提交之前检查了请求,并且在两个实例中请求看起来都相同(标题等...)。 它几乎就像第一次访问页面时没有初始化一样?!
---编辑--- 万一它有帮助,我的工厂做的请求看起来像......
// return request
return $http({
url: url,
method: "POST",
withCredentials: true,
headers: {
'Authorization': 'Basic '+btoa(username+':'+password)
}
});
},
我的拦截器......
request: function(config) {
// if authenticated, include the JWT token for the user
if(config.url.indexOf(API) === 0 && AuthFactory.isAuthenticated()) {
config.headers.authorization = 'Bearer ' + AuthFactory.getToken();
}
return config;
},
谢谢!