gpt4 book ai didi

node.js - 重定向后 Cookie 消失

转载 作者:太空狗 更新时间:2023-10-29 17:35:16 24 4
gpt4 key购买 nike

我有:

1) 具有自己域的客户端应用程序:http://client.com

2) 具有单独域的服务器端应用程序:http://server.com

现在,

场景是:

1) 开业http://client.com/home在浏览器中显示一个 HTML 页面。

2) http://client.com/home重定向到 http://server.com/login

3) http://server.com/login存储一个 cookie 'auth' 并将重定向指令发送到 http://client.com/welcome

响应:

Access-Control-Allow-Origin: *

Connection: keep-alive

Content-Length: 104

Content-Type: text/html; charset=utf-8

Date: Wed, 16 Jan 2019 10:47:11 GMT

Location: http://client.com/welcome

Set-Cookie: auth=1479da80-197c-11e9-ba74-59606594e2fb; Path=/

Vary: Accept

X-Powered-By: Express

4) 浏览器收到响应,其中确实包含cookie 'auth'

5) 浏览器重定向到http://client.com/welcome

6) 'auth' cookie 被发送到 http://client.com/welcome

要求:

Cookie: auth=1479da80-197c-11e9-ba74-59606594e2fb

7) http://client.com/welcome返回 HTML 但不返回 cookie 'auth'

enter image description here

enter image description here

8) http://client.com/welcomehttp://server.com/data 发出 AJAX 请求(已启用 CORS),但未发送 cookie“auth”

9) http://server.com/data不识别用户,因为没有 cookie

客户端是由 Node.js 托管的 Angular 应用

编辑:

按照建议,我在 server.com 的响应中添加了:

Access-Control-Allow-Credentials: true

但什么都没有改变。

相关客户端代码:

const headerOptions = new HttpHeaders({
'Content-Type': 'application/json', 'withCredentials': 'true', 'Access-Control-Allow-Origin': 'true', 'Access-Control-Allow-Credentials': 'true'
});

this.httpClient.get<any>(this.baseUrl + "data", { headers: headerOptions }).subscribe((res) => {

最佳答案

将 ajax 请求发送到您的 http://server.com 时,您应该使用 withCredentials 选项并且您的 server.com 应该将 Access-Control-Allow-Credentials 设置为 true。

Example code in Node.JS server:

var cors = require('cors');
var corsOptions = {
origin: '*',
credentials: true };

app.use(cors(corsOptions));

更多相关信息:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials

Example code in Angular.JS client
import {RequestOptions, Request, RequestMethod} from '@angular/http';

const options = new RequestOptions({
method: RequestMethod.Post,
url: 'https://google.com',
withCredentials: true
});

更多相关信息:https://angular.io/api/http/RequestOptions

另请查看:https://github.com/angular/angular/issues/24283 - 看起来某个特定版本的 Angular 对此标志有问题,因此除非您使用更新的版本,否则您可能需要明确设置 header 。

这样做的原因是,除非服务器明确告诉客户端 “我将接受由另一个域传递的 cookie(之前在我的域中设置)” - 接受 cookie 将是安全问题。 更多信息:https://en.wikipedia.org/wiki/Cross-site_request_forgery

关于node.js - 重定向后 Cookie 消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54215087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com