为什么Req.user与PassportJs一起使用会执行这么多查询?

问题描述

我在我的项目中使用护照和本地护照。我的代码并不是真正的问题,但是用法可能有误。我对用户进行身份验证没有任何问题,但是当我致电req.user发送用户信息时,

router.get("/user",(req,res,next) => {
  if (req.user) res.send(req.user);
  else res.send({});
});

这是在后台发生的

Executing (default): SELECT "sid","expires","data","createdAt","updatedAt" FROM "Session" AS "Session" WHERE "Session"."sid" = '3OB8pYgimsxVFchumj8JxAHvR8D6DLwZ';
Executing (default): SELECT "id","Username","Password","Name","Email","IsAdmin","TestValueUnder","TestValueTwo","updatedAt" FROM "User" AS "User" WHERE "User"."id" = 1;
Executing (default): UPDATE "Session" SET "expires"=$1,"updatedAt"=$2 WHERE "sid" = $3
在上述sql中,

使用 SELECT 查询数据库中的会话ID,并使用 SELECT 数据库获取用户。然后用 UPDATE 更新数据库,这是我不理解的第一部分。为什么要在每个req.user发送时更新数据库

用户登出我使用此功能时,

router.get("/logout",res) => {
  req.logout();
  req.session.destroy(function (err) {  
    if (err) {
      return next(err);
    }
    return res.send(req.isAuthenticated());
  });
});

并且上述功能导致此SQL查询

Executing (default): SELECT "sid","updatedAt" FROM "User" AS "User" WHERE "User"."id" = 1;
Executing (default): SELECT "sid","updatedAt" FROM "Session" AS "Session" WHERE "Session"."sid" = '3OB8pYgimsxVFchumj8JxAHvR8D6DLwZ';
Executing (default): DELETE FROM "Session" WHERE "sid" = '3OB8pYgimsxVFchumj8JxAHvR8D6DLwZ'
Executing (default): SELECT "sid","updatedAt" FROM "Session" AS "Session" WHERE "Session"."sid" = '3OB8pYgimsxVFchumj8JxAHvR8D6DLwZ';
Executing (default): SELECT "sid","updatedAt" FROM "Session" AS "Session" WHERE "Session"."sid" = 'dbu8NshJGeFvTTWOslXPK9_yYifzvrb9';
Executing (default): INSERT INTO "Session" ("sid","updatedAt") VALUES ($1,$2,$3,$4,$5) RETURNING "sid","updatedAt";

有5个 SELECT ,1个 UPDATE 和1个 Delete 。请注意,当我调用注销(/ logout路由)时,我也调用req.user(/ user路由),因为我在每个具有高阶组件(React.js)的页面中都调用req.user(/ user路由)。这是正常查询吗?因为在我看来,对此操作的查询很多。我在某个地方做错了吗还是这是正常的做法,因为我想减少对数据库查询

最后一个问题是,这些更新发生时,我的expires列也会更新到更新日期。应该过期意味着cookie.maxAge时间? 注意:我将Postgresql与Sequelize.js一起使用 expires column

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)