【问题标题】:How to use express req variables with socket.io如何在 socket.io 中使用 express req 变量
【发布时间】:2016-07-12 21:23:03
【问题描述】:

所以我要做的是,当有人加载我的网站并通过护照进行身份验证时,他们的 userId 存储在我的app.get('/home', funciton(req, res) 中的req.user.id 中。现在我想做的事情是这样的:

app.get('/home'. function(req, res){
    io.on('connection', function(socket){
        socket.emit('userId', req.user.id);
    });
}

这基本上是我试图做的,但我知道这是非常错误的。现在我的问题是如何将req.user.id 发送给客户端,以便在以后与服务器的交互中使用它。

【问题讨论】:

  • 我已经在your prior question 中告诉过你信息必须来自cookie/session。如果您在 app.get() 请求中告诉使用 req.user.id 来自哪里(您可能有一些中间件从会话/cookie 中执行此操作),那么我们可以为您提供更好的帮助。您需要包含更多处理身份验证和设置用户凭据的代码,然后我们才能帮助您弄清楚如何从 socket.io 访问它。
  • 这与您的prior question 非常接近,但您似乎不喜欢上一个问题的答案,所以您似乎只是再试一次。答案还是一样。

标签: node.js sockets express routes


【解决方案1】:

看起来您正在接收 GET 请求并使用 Express 对吗?您可能在查询字符串中传递了用户 ID,因此您需要使用:

req.query.userid

这基本上是在查询字符串中提取分配给键的值。

来源:http://expressjs.com/en/api.html#req.query

我还建议在查询字符串中发送类似 ?userid=12345 的内容,而不是在查询字符串中发送对象 (user.id),因为对对象进行编码会不必要地增加更多复杂性并且不需要。

【讨论】:

  • 这似乎是要走的路,但我怎么可能确保这一点。是什么阻止了某人只是更改他们的网址并获取其他人的东西。我不确定如何确保这一点
  • 我使用它的方法是在客户端拉查询字符串?
  • 对于您的第一个问题,这是另一个需要身份验证的主题(基本上,当用户登录服务器时,会为客户端提供只有客户端知道的“令牌”,然后在每个请求中发送该令牌) 这是一个很好的介绍教程:scotch.io/tutorials/easy-node-authentication-setup-and-local 您的第二个问题,您的客户端将发送带有查询字符串的 GET 请求。不确定您在客户端使用什么框架,但您可以查看如何以服务器可以处理的正确方式格式化查询字符串
【解决方案2】:

您可以在 socket.io 中使用快速会话
有一个名为 express-socket.io-session 的 npm 模块

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 2015-08-03
    • 2014-04-24
    • 2012-10-17
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    相关资源
    最近更新 更多