gpt4 book ai didi

javascript - 获取 user_id 而不渲染任何路由

转载 作者:行者123 更新时间:2023-12-03 06:36:58 24 4
gpt4 key购买 nike

如何在不向任何路由(端点)发出任何请求的情况下登录用户数据?

//how about I want to get logged in user's id here?

router.get('/',function(req,res,next){
//usually we get data here
}

我知道我们可以使用 req.user.id 来获取用户的对象,或者将其存储到 res.locals.userId = req.user.id

最佳答案

您的服务器可以承载无数用户(它是多用户的)。因此,当您没有收到来自特定用户的特定请求时,就不存在单个“当前”或“登录”用户。

只有在处理请求时,您才会代表特定用户执行某些操作,因此存在与该请求关联的特定用户。

根据您的登录方式,您可能有某种 session 存储,其中包含所有当前登录的用户。当前登录的用户通常是通过查看 session cookie(针对该请求)然后在本地 session 存储中查找该 session cookie 以从 session 存储中获取用户信息来确定请求中的当前登录用户。

<小时/>

如果您需要用户信息是在建立 socket.io 连接时,那么您可以通过 client.request.headers.cookie 访问建立 socket.io 连接时的 cookie。 。使用 cookie,您应该能够获取您的登录 session ,然后访问您想要的任何其他 session 信息(就像普通的 http 请求一样)。

io.on('connection', function(client) {
var cookie = client.request.headers.cookie;
// using the cookie, you should then be able to get to your login session
// using the session, you should be able to get to any other login data
});

需要记住的一个概念性的事情是,socket.io 连接(基于 webSocket)的创建始终以普通的 HTTP 请求(然后协议(protocol)升级为 webSocket 连接)开始。因此,所有正常的 HTTP 内容此时都可用(例如 cookie、 header 等...)。

如果您尚未实现任何类型的用户身份验证(设置上述 cookie),那么您需要在创建 socket.io 连接之前让用户进行身份验证(因此当您访问上面的 cookie 时,该 cookie 就在那里) )或者您需要将用户身份验证作为 socket.io 连接过程的一部分来实现,这是通过 socket.io 中间件支持的。

如果您在从护照访问 cookie 时遇到问题,请参阅:How to access Cookie set with Passport.js .

关于javascript - 获取 user_id 而不渲染任何路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38156267/

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