gpt4 book ai didi

node.js - Passport token auth *without* 数据​​库 session

转载 作者:IT老高 更新时间:2023-10-28 23:08:32 29 4
gpt4 key购买 nike

我正在寻找一种方法来为 Passport.js 使用 Twitter 策略,而无需在数据库中使用 session 集合/表。这样做的原因是我们将所有数据保存在 session 集合中,这些数据可能会变得非常大,并且每当用户发出请求时我们都会保存数据库往返,因为我们不必每次都去数据库来获取 session 数据。

无论如何,我们应该能够使用 token (JSON Web Token)来验证用户身份,正如这篇精彩的文章所描述的那样:

https://scotch.io/tutorials/authenticate-a-node-js-api-with-json-web-tokens

但我很困惑,为什么没有一种简单的方法可以用 Passport 做到这一点? (这篇文章在没有 Passport 的情况下做所有事情 - 但肯定 Passport 已经涵盖了这一点?)。

也许我想太多了,这样做的方法只是省略我在 Express 中使用数据库 session 的调用,然后 Passport 已经足够聪明来处理 JWT?不知何故,我对此表示怀疑。

例如,在我的 Express 服务器中仅注释掉这段代码肯定是不够的:

//app.use(expressSession({
// secret: 'arrete_x_paulette',
// store: new MongoStore({mongooseConnection: mongoose.connection}),
// saveUninitialized: true,
// resave: true,
// cookie: {
// secure: false,
// maxage: 6000000
// },
// proxy: false
//}));

//app.use(passport.session());

那么,使用 Passport 就够了吗?

为什么有人会使用存储在数据库中的 session 而不是使用基于 JWT 的身份验证?

最佳答案

更新:更好的解决方案是完全禁用 session 。

我认为通过将 { session: false } 传递给 passport.authenticate 来删除用于 express 的 session 中间件并为 Passport 禁用它应该可以工作,请参阅 docs .

这个想法是 session 数据存储在 token 中,因此您根本不需要 session 。将其存储在内存中(如下所述)只会浪费内存。将它存储在客户端的 cookie 中也不好,因为客户端应该决定将 token 存储在哪里而不是服务器。


如果您只想将 express.js session 保留在内存中,并且如果您使用标准 expressjs 的 session 来处理 session ,那么您只需删除 store: new MongoStore(...) 行:

app.use(expressSession({
secret: 'arrete_x_paulette',
saveUninitialized: true,
resave: true,
cookie: {
secure: false,
maxage: 6000000
},
proxy: false
}));

默认使用MemoryStore,见documentation .

关于node.js - Passport token auth *without* 数据​​库 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33852793/

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