Angularjs 无法访问Angular.js中的响应cookie

Angularjs 无法访问Angular.js中的响应cookie,angularjs,cookies,Angularjs,Cookies,我正试图从对$http请求的响应中提取cookies。 请求与cookie一起返回,但我无法获取cookie以便存储它。 反应的图片表明一切正常 但是,如果我尝试通过以下方法提取Set Cookie头的值 .then(function(response) { //First function handles success log(response.data); registrationOutcomeText = response.data; log(r

我正试图从对$http请求的响应中提取cookies。
请求与cookie一起返回,但我无法获取cookie以便存储它。
反应的图片表明一切正常

但是,如果我尝试通过以下方法提取Set Cookie头的值

.then(function(response) {
     //First function handles success
     log(response.data);
     registrationOutcomeText = response.data;
     log(response.headers('Set-Cookie'));
}
我无法这样做,因为我收到一个空结果

通过检查我的cookies,我知道它没有被保存,所以

$cookies.get("AuthToken")

无法工作。

我认为您的解决方案可能是拦截响应,如文档中的“转换请求和响应”部分所述:
$http

对,所以这个解决方案可能很糟糕,但我觉得它是必要的。原因是:

  • 试图通过标头访问cookie('set-cookie')无效,返回null。我试图通过在服务器上的CORS过滤器中设置expose headers选项来纠正这个问题,但是这仍然不起作用
  • 我需要能够访问cookie值,以便将其保存到域的cookie中,因为这是指定cookie保留多长时间的关键步骤。否则,它将在浏览会话结束时过期,这是不好的
  • 仅使用with credentials:true是不够的,因为cookie随后存储在我的服务器的域下,而不是前端站点。因此,由于XSS保护,我的站点无法访问cookie。我需要能够将cookie保存到站点的存储中,这主要是由于原因二所述
  • 因此,以下是我为解决这些问题所做的工作

    在我的服务器上,我在响应中添加了一个新的自定义标题“Authentication”。 这可以通过向响应中添加以下内容来实现:

        .header("Authentication", authToken)
    
    (例如)

    接下来,我需要在我的CORS过滤器中公开此自定义标题。
    因为我有一个Java服务器,所以我的CORS过滤器是这样的:

    @Provider
    public class NewCrossOriginResourceSharingFilter implements ContainerResponseFilter {
    
        @Override
        public void filter(ContainerRequestContext requestContext, ContainerResponseContext response) {
            response.getHeaders().putSingle("Access-Control-Allow-Origin", [My site]);
            response.getHeaders().putSingle("Access-Control-Allow-Methods", "OPTIONS, GET, POST, PUT, DELETE");
            response.getHeaders().putSingle("Access-Control-Allow-Headers", "Content-Type");
            response.getHeaders().putSingle("Access-Control-Expose-Headers", "Authentication");
            response.getHeaders().putSingle("Access-Control-Allow-Credentials", true);
        }
    
    }
    
    请注意,如果直接复制和粘贴,这将不起作用,因为您需要用自己的域替换[My site]值,否则您的请求将无法满足CORS筛选器

    最后,这意味着在客户端我可以很容易地访问标题“Authentication”,如下所示

    .then(function(response) {
            $scope.registrationOutcomeText = response.data;
            console.log(response.headers("Authentication"));
        }
    


    从那里,我可以访问、存储和检索cookie,解决最初在答案开始时发现的所有三个问题

    我不确定这会有什么帮助,除非我弄错了,否则这与从响应中获取cookie无关。如果您查看此部分:您将找到一种访问响应标题的方法,因为transformResponse会填充
    (数据、HeaderGetter、状态)
    作为其回调的参数。这个问题可能有帮助:var cookie=response.headers('Set-cookie');
    .then(function(response) {
            $scope.registrationOutcomeText = response.data;
            console.log(response.headers("Authentication"));
        }