Angularjs $http, 它似乎不明白 "Set-Cookie" 在回应中

我有 nodejs express REST api 使用护照模块进行身份验证。
登录方法 /GET/ 返回文件。 cookie 在标题中。 当我称之为 Chrome, 它适用于我的文件 cookie 安装在我的浏览器中。

但如果我通过 $http 的 Angularjs, 文件 cookie 将无法安装。


Set-Cookie:connect.sid=s%3Ad7cZf3DSnz-IbLA_eNjQr-YR.R%2FytSJyd9cEhX%2BTBkmAQ6WFcEHAuPJjdXk3oq3YyFfI; Path=/; HttpOnly


正如你可以看到的那样 Set-Cookie 存在于服务响应标题中 http.

可能是, HttpOnly 也许这个问题的来源? 如果是这样,我怎么能改变它? 这是我的快递配置 :


app.configure/function // {
app.use/allowCrossDomain/;
app.use/express.bodyParser///;
app.use/express.cookieParser///
app.use/express.session/{ secret: 'this is a secret' }//;
app.use/flash///;
//passport init
app.use/passport.initialize///;
app.use/passport.session///;
app.set/'port', process.env.PORT || 8080/;
}/;


谢谢您的帮助。
已邀请:

风见雨下

赞同来自:

请务必配置您的请求。 $http 使用凭据。
来自文件 XHR:

https://developer.mozilla.org/ ... _CORS
提供最有趣的机会 XMLHttpRequest, 所以我。
访问控制是能力 "credentialed" 请求,哪个
知道O. HTTP 文件 cookie 和 HTTP 身份验证信息。 经过
横行呼叫中的默认值 XMLHttpRequest 浏览器NE。
将发送凭据。 在 XMLHttpRequest 必须安装特定标志。
调用时的对象。

您可以使用该对象 options 要配置凭据的使用,请参阅

http://docs.angularjs.org/api/ng.%24http
例子:


$http/{withCredentials: true, ...}/.get/.../

八刀丁二

赞同来自:

您如何检查文件的存在 cookie?


$http

- 它只是裹着 XHR 浏览器,就像 jQuery
$.ajax

和朋友。 这意味着您的浏览器将处理文件。 cookie 一般。

我假设文件 cookie

安装了,但你试着阅读它
document.cookie

.
HttpOnly

禁止脚本可以访问该文件 cookie.

这是一件好事。


HttpOnly

有助于软化攻击 XSS. 它使恶意脚本无法窃取用户会话令牌 /因此,它登录/.

不要关闭
HttpOnly

.

你仍然不需要饼干。 只要
$http

- 它只是一个贝壳 XHR, 浏览器将自动发送文件 cookie 下一个请求。 您可以通过在Developer工具栏中查看请求来验证。

冰洋

赞同来自:

我通过安装解决了这个问题
{withCredential : true}

询问 angular
$http

并安装 :


res.header/"Access-Control-Allow-Credentials", true/;


在我的快速服务器配置中。 所以我的文件 cookie 很好地显示在文件列表中 cookie 我的浏览器。

江南孤鹜

赞同来自:

在解决方案下面为我工作



Angular

我使用以下代码片段使用
withCredentials: true

通过我的要求。


this._http.post/this._apiUrl + 'api/' + url, data, { withCredentials: true }/
.subscribe/data => { resolve/data/ }, error => { this.showServerError/error/}/


在我得到一个决定之前的节点中,我刚刚初始化 CORS



帮助


app.use/cors///;


但现在我实现了以下代码片段


app.use/cors/{origin: [
"[url=http://localhost:5000"]http://localhost:5000"[/url]
], credentials: true}//


在哪里
http://localhost:5000
- 这是我申请的结束点 Angular. 你
你可以安装它 URL 动态地从文件中动态 config 或者 .env.

我希望以上解决方案为您的问题工作。

君笑尘

赞同来自:

您可以通过设置来改变它
express.session

:


app.use/express.session/{
secret : 'this is a secret',
cookie : {
httpOnly : false,
maxAge : XXX // see text
}
}/;


但我不这么认为 Angular 非常小心文件 cookie, 它们由浏览器处理 /我同意 @josh3736, 你有什么要保存
httpOnly


true

/.

由于您的文件,可以以某种方式 cookie 是 /浏览器/会话文件 cookie. 您可以尝试看看它是否有效,显式安装
maxAge

对于文件。 cookie /以毫秒为单位/.

要回复问题请先登录注册