我正在尝试从对$ http请求的响应中提取Cookie 请求返回就好了,还有cookie,但是我无法获取cookie,所以我可以存储它 回应的图片表明一切正常。
但是,如果我尝试通过诸如
之类的方法提取Set-Cookie标头的值.then(function(response) {
//First function handles success
log(response.data);
registrationOutcomeText = response.data;
log(response.headers('Set-Cookie'));
}
我收不到空结果时无法这样做。
通过检查我的cookie,我知道它没有被保存,所以像
这样的东西$cookies.get("AuthToken")
无效。
答案 0 :(得分:1)
是的,所以这个解决方案可能很糟糕,但我认为这是必要的。原因是:
因此,以下是我为解决这些问题所做的工作。
在我的服务器上,我在响应中添加了一个新的自定义标题" Authentication"。 这可以通过在响应中添加以下内容来完成:
.header("Authentication", authToken)
(例如)
return Response.status(200).entity(message).header("Authentication", authToken).build();
接下来,我需要在我的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);
}
}
请注意,如果直接复制和粘贴,则无法正常工作,因为您需要将[我的网站]值替换为您自己的域名,否则您的请求将无法满足CORS过滤器的要求。
最后,这意味着在客户端我可以访问标题" Authentication"很容易,如下所示。
.then(function(response) {
$scope.registrationOutcomeText = response.data;
console.log(response.headers("Authentication"));
}
从那里,我能够以解决在答案开始时最初确定的所有三个问题的方式访问,存储和检索cookie。
答案 1 :(得分:0)
我认为您的解决方案可以拦截响应,如文档中的“转换请求和响应”部分所示: https://docs.angularjs.org/api/ng/service/ $ HTTP