在CORS请求中使用angularjs $ http时遇到问题,我的成功函数authenticateSuccess(数据,状态,标题)获取错误的标题。我们知道,每个CORS请求在angularjs中会有两次,我从服务器获得两次响应,第一次是cors验证信息,第二次是需要响应,但是我的成功函数在第一个响应中得到了头。但它的数据来自第二次回应。
function login(credentials) {
var data = {
username: credentials.username,
password: credentials.password,
rememberMe: credentials.rememberMe
};
console.log(data);
return $http.post('//localhost:8080/api/authenticate', data).success(authenticateSuccess);
function authenticateSuccess(data, status, headers) {
console.log(headers());
console.log(data);
var bearerToken = headers('Authorization');
if (angular.isDefined(bearerToken) && bearerToken.slice(0, 7) === 'Bearer ') {
var jwt = bearerToken.slice(7, bearerToken.length);
service.storeAuthenticationToken(jwt, credentials.rememberMe);
return jwt;
}
}
}
答案 0 :(得分:0)
您收到此问题时,您发送的标头与后端的标头不匹配
因此,假设您在前端发送标题
contentHeaders = new Headers(); contentHeaders.append('授权','你的令牌'); contentHeaders.append('Content-Type','application / json'); contentHeaders.append('Access-Control-Allow-Origin','*');
因此,像'授权','内容类型','访问控制允许 - 来源'这样的标题应与后端的标题允许匹配。
所以在后端'Access-Control-Allow-Headers'应该有以上所有标题,见下文
res.header(“Access-Control-Allow-Origin”,“*”); res.header(“Access-Control-Allow-Headers”,“Authorization,content-type,Access-Control-Allow-Origin”);
因此,在Access-Control-Allow-Headers中,您必须传递从前端发送的所有标头:'Authorization','Content-type','Access-Control-Allow-Origin'。
当您使用上述概念时,它将完美运作。
谢谢