[英]passport-local cookie and session database handling
我目前正在尝试为我当前的项目设置 oauth 服务。 作为这一切的新手,我已经阅读了很多关于这个主题的文章,但我仍然缺少一些文章。
我的环境是:
在我的 nodejs 服务器上,我正在使用这些模块:
解决方案的不同部分都在起作用:我可以创建新用户,创建新会话,在 express-mysql-session 数据库中查看他们的内容。
但是,我对以下内容感到很困惑:
当我的 web 客户端尝试访问受保护的路由时,我似乎没有在请求中获得任何 cookie。 超级代理默认不会发送我的护照cookie吗? 我在某处读到,在单页应用程序中,jwt 可能更合适,这与这个问题有关吗?
尽管我阅读了所有内容,但我仍然对反序列化用户感到困惑。 我的理解是,使用本地护照解决方案,在访问时,web 客户端将发送 session cookie,其中包含 session Id。 Passport 将从数据库中获取有关此 session 的更多信息,然后继续处理请求。 这个 session 信息检索是否自动发生(在 express-mysql-session 中?)? 或者您是否必须在 deserializeUser 中“手动”执行此操作(许多示例显示User.findById
调用)? 如果您必须“手动”执行此操作,这意味着您必须使用与该模块使用的连接不同的连接来访问 express-mysql-session 数据库?
要注销,是否 req.logout() 足以确保 session 完全从 session 数据库中删除?
到目前为止我找到的答案:
withCredential
方法添加到 superagent,以使其发送身份验证 cookies: res = await superagent
.get(url)
.withCredentials()
.send();
在 CORS 方面,在服务器上,如果使用“cors”npm 模块,则需要“凭据”选项,例如:
app.use(cors({
origin: ['http://localhost:3003'],
methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
credentials: true,
}));
这些模块会自动检索所有 session 信息。 但是,许多示例显示此调用返回到用户数据库以获取更多信息(权限、其他信息)。 目标是避免在两个位置(会话数据库和用户配置文件数据库)拥有相同的信息,并使这些信息不同步(当帐户关闭时等......)
req.logout()
断开 session 的连接,但 session 信息仍然存在于数据库中。 以下问题使我走上了正轨: 如何在 express + passport js 中删除注销时的 cookie? . 您需要使用 req.logout、res.session.destroy 和 res.clearCookie 来删除客户端 cookie:
router.post('/logout/',
(req, res) => {
req.logout();
res.status(200).clearCookie('connect.sid', {
path: '/',
secure: false,
httpOnly: false,
domain: 'place.your.domain.name.here.com',
sameSite: true,
}).end();
req.session.destroy();
},
Session 已断开连接,数据库已清理,cookie 消失。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.