获取user_id而不渲染任何路由

时间:2016-07-02 03:44:04

标签: javascript node.js express

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

//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

2 个答案:

答案 0 :(得分:1)

您的服务器可以托管数以万计的用户(它是多用户)。因此,当您不在特定用户的特定请求中时,没有单个"当前"或者"登录"用户。

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

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

如果您想要用户信息的点是建立socket.io连接,那么您可以通过client.request.headers.cookie建立socket.io连接时访问cookie。使用cookie,您应该能够获得登录会话,然后访问您想要的任何其他会话信息(与普通的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请求(然后协议升级到webSocket连接)开始。因此,当时所有正常的HTTP内容都可用(例如cookie,标题等)。

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

如果您无法通过护照访问Cookie,请参阅:How to access Cookie set with Passport.js

答案 1 :(得分:0)

您可以使用快速middleware并在处理任何路线之前检查用户的ID,然后相应地重定向。