首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >除了passport.js,为什么还要使用cookie-session?

除了passport.js,为什么还要使用cookie-session?
EN

Stack Overflow用户
提问于 2020-07-14 20:12:58
回答 2查看 936关注 0票数 2

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

我使用的是cookie-session,而不是express-session,因为我是初学者。我对cookie-session的理解是,它每次都会发送一个会话ID,该ID可用于在需要时查找数据库。

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

EN

回答 2

Stack Overflow用户

发布于 2020-12-23 08:24:57

“因为我是初学者,所以我使用cookie-session而不是express-session。”

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

代码语言:javascript
复制
passport.serializeUser(
  (user, done ) => {
    done(null, user.id); // stores the id<4kb
  }
);

当客户端授权你的应用程序时,google会向你的回调url发送响应。

代码语言:javascript
复制
app.get("/auth/google/callback", passport.authenticate("google"))

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

代码语言:javascript
复制
 passport:{user:userId}

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

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

我对cookie-session的理解是,它每次都会发送一个会话ID,此ID可用于在需要时查找数据库。

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

代码语言:javascript
复制
app.use(passport.initialize());
app.use(passport.session());

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

票数 1
EN

Stack Overflow用户

发布于 2020-07-16 17:04:16

您不需要使用会话。这完全取决于你。只要把{session: false}放在路线上就行了。您不需要编写passport.serializeUserpassport.deserializeUsercookie-session将cookie放在客户端系统上,每次请求都会发送cookie。passportjs搜索cookie并运行deserializeUser以将其转换为对象,并将其附加到所请求对象。

express-session将会话数据存储在服务器上;它只将会话标识符保存在cookie中,而不是会话数据。其中as cookie-session主要用于轻量级会话应用程序。它允许您将会话数据存储在cookie中,但存储在客户端浏览器中。仅当会话数据相对较小且容易编码为原始值See this question for more understanding时才使用它

代码语言:javascript
复制
const express = require('express');
const { Router } = express;
const router = new Router();
router
  .get('/', passport.authenticate('google', { session: false }))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62894933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档