使用angularjs $ http的CORS问题

时间:2016-07-27 02:01:50

标签: javascript angularjs cors

在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;
            }
        }
    }

1 个答案:

答案 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'。

当您使用上述概念时,它将完美运作。

谢谢