gpt4 book ai didi

node.js - 为什么除了 passport.js 之外还要使用 cookie-session?

转载 作者:行者123 更新时间:2023-12-05 02:51:54 28 4
gpt4 key购买 nike

目前我对passport.js的理解是passport.js序列化用户对象,每次发送一个ID给客户端。如果这是一个愚蠢的问题,我才刚刚开始,很抱歉:

因为我是初学者,所以我正在使用 cookie-session 而不是 express-session。我对cookie-session的理解就是每次都会发送一个session ID,需要的时候可以用这个ID去查数据库。

现在,我不明白为什么我们不能只使用 passport.js ID?为什么我们还需要使用 cookie-session 呢?另外,(这可能有点不相关,但是)基于 session 的身份验证和基于 token 的身份验证之间的区别是共享的这个 ID 是动态的,还是每次都在变化?这仍然是 2020 年的标准和现代方式吗?

最佳答案

“作为初学者,我使用的是 cookie-session,而不是 express-session。”

使用 cookie session 不会让任何人成为初学者。如果你要存储大数据,使用 express-session,因为它将数据存储在数据库或 redis 中,保留该数据的数据库 id,所以当它收到请求时,获取具有该 id 的数据库并比较请求证书。另一方面,cookie-session 在用户浏览器的 cookie 中存储最多 4kb 的数据,由于 passport.js 的 cookie 中只存储 user-id,因此通常使用 cookie session。

passport.serializeUser(
(user, done ) => {
done(null, user.id); // stores the id<4kb
}
);

当客户端授权您的应用时,谷歌会将响应发送到您的回调 url。

app.get("/auth/google/callback", passport.authenticate("google"))

passport.authenticate() 将调用 req.login() 这是生成 passport.user 的地方。 req.login() 将启动 serializeUser(),它确定应将用户的哪些数据存储在 session 中。

 passport:{user:userId}

现在这个对象将被分配给req.session。所以我们将有 req.session.passport.user

每次当您向服务器发出请求时,浏览器会自动检查是否设置了与该服务器相关的 cookie,如果有则自动将 cookie 附加到请求中。如果您使用的是基于 token 的身份验证,则每次发出请求时都必须手动将 cookie 附加到请求中。 Cookie只是一个传输媒介,你存储数据并移动数据,你甚至可以将token存储在cookie中。 Cookie 不仅仅与身份验证有关。如果你有服务器端项目,你必须设置cookie。(这只是一个侧 Node )。

“我对cookie-session的理解是每次发送一个session ID,需要的时候可以用这个ID去查数据库。”

到目前为止,我已经解释了 session 是如何创建的。现在当用户发出请求时会发生什么?在 app.js 文件中,你应该有两个中间件。

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

app.use(passport.initialize()) 此函数检查 req.session.passport.user 是否存在,如果存在,它将调用 passport.session( ).如果它在 session 中找到一个序列化的用户对象,它会认为这个请求已经过身份验证。然后 deserializeUser() 将被调用。它将检索用户并将其附加到 req.user

关于node.js - 为什么除了 passport.js 之外还要使用 cookie-session?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62894933/

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