gpt4 book ai didi

node.js - 我无法在 Nodejs (Express) 中将 cookie 的 SameSite 属性设置为 None

转载 作者:行者123 更新时间:2023-12-03 21:47:48 29 4
gpt4 key购买 nike

我们正在为 Nodejs (Express) 中的 Twitter View 应用程序创建后端。
我正在考虑使用 Twitter Api 进行登录并存储在对 session 进行身份验证后返回的 token ,然后在再次访问时从 cookie 恢复 session 。
但是,再次访问该cookie时会被阻止,无法恢复 session 信息。
我使用的浏览器是 chrome,但是从 chrome 80 版开始,当没有指定 SameSite 属性时,SameSite 属性似乎是 Lax(从同域站点调用时发送 cookie),在这种情况下,前端和后端是不同的域,因此 cookie 被阻止。
所以我试图将 SameSite 属性设置为 None (当被任何站点调用时发送一个 cookie),但我似乎无法设置好并问了这个问题。
我想知道如果我在 app.use(session({})) 的部分有所不同,我是否可以将 SameSite 属性设置为 None,但是......
如果有人知道解决方案,我将不胜感激。
感谢您的帮助。
对应的源代码

callback_url = env.URL + "oauth/callback";

app.use(
cookieSession({
name: "session",
keys: ["thisappisawesome"],
maxAge: 24 * 60 * 60 * 100
})
);

app.use(cookieParser());

// Save to session
passport.serializeUser(function(user, done) {
done(null, user.id);
});

// Restore from Session
passport.deserializeUser(function(user, done) {
done(null, user);
});

passport.use(
new TwitterStrategy({
consumerKey: env.TWITTER_CONSUMER_KEY,
consumerSecret: env.TWITTER_CONSUMER_SECRET,
callbackURL: callback_url
},
async (token, tokenSecret, profile, done) => {

return done(null, profile);
}
));

app.use(session({
allowedHeaders: ['sessionId', 'Content-Type'],
exposedHeaders: ['sessionId'],
secret: 'reply-analyzer',
resave: false,
saveUninitialized: false
}));

var cors_set = {
origin: env.CORS_ORIGIN_URL,
methods: "GET,HEAD,PUT,PATCH,POST,DELETE",
credentials: true // allow session cookie from browser to pass through
};

app.use(passport.initialize());
app.use(passport.session());
app.use(cors(cors_set));

我试过的。
1.我尝试在 app.use(session({})) 部分设置 cookie 选项,但无法将 SameSite 属性设置为 None。
app.use(session({
allowedHeaders: ['sessionId', 'Content-Type'],
exposedHeaders: ['sessionId'],
secret: 'reply-analyzer',
resave: false,
saveUninitialized: false,
cookie : {
secure: true,
sameSite: 'None'
}
}));
2.我尝试使用以下中间件( express-samesite-default ),但是可以将 SameSite 属性设置为 None,而事实并非如此。
var sameSiteCookieMiddleware = require("express-samesite-default");

app.use(sameSiteCookieMiddleware.sameSiteCookieMiddleware());

附加信息
Node.js v12.18.2
Chrome v84.0.4147.135

最佳答案

我能够自我解决,并将描述我是如何解决问题的。
在代码中有两个 session 和一个 cookie session ,但我决定使用 cookie session ,因为它似乎工作正常。
最终结果如下

var cookieSession = require("cookie-session");
app.set('trust proxy', 1)
app.use(
cookieSession({
name: "__session",
keys: ["key1"],
maxAge: 24 * 60 * 60 * 100,
secure: true,
httpOnly: true,
sameSite: 'none'
})
);

关于node.js - 我无法在 Nodejs (Express) 中将 cookie 的 SameSite 属性设置为 None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63680921/

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