javascript - 将 Websocket 与 Passport 一起使用

标签 javascript node.js websocket passport.js

当有人打开 WebSocket 连接时,我如何访问当前 session 的 Passport 登录?

我找到了一个不错的项目express-ws这似乎工作得很漂亮

app.ws('/', function(ws, req) {
    ws.on('message', function(msg) {
        console.log('express-ws --- ', msg);
    });
    console.log('socket', req.user); //current user == req.user
});

但是我将如何通过普通的 Websocket 连接获取相同的信息?

var WebSocketServer = require('ws').Server,
    wss = new WebSocketServer({ port: 3001 });

wss.on('connection', function(socket){
    //Where is the current user????
    console.log('connection');

    socket.on('message', function(message){
        console.log('message received', message);
    });
});

(第二个连接工作得很好——但我一辈子都找不到从 Passport 获取登录信息的方法)

最佳答案

在创建 WS 服务器时,添加如下“verifyClient”参数以获取 session 信息:

  const wss = new (require('ws').Server)({
    server,
    verifyClient: (info, done) => {
      sessionParser(info.req, {}, () => {
        done(info.req.session)
      })
    }
  })

sessionParser 是您的 express-session 配置对象。然后,这允许您通过 req.session 在 websocket 中访问它。如果您使用的是 Passport ,您可能需要 req.session.passport.user..

关于javascript - 将 Websocket 与 Passport 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35654099/

相关文章:

node.js - Firebase 与 Electron,如何保护主机?

php - 服务器到客户端的更新,无需来自客户端 Websocket 编程的持续/持久请求

javascript - 尝试在 Javascript 中选择单个 HTML 表中的所有复选框

javascript - 抽象类中用于创建 self 实例的 Typescript 静态方法

node.js - 如何使用 NodeJs 连接到 docker compose 中的 postgres?

node.js - Socket.io + Node Js + Angular 2 - CORS header 'Access-Control-Allow-Origin' 丢失

node.js - 我可以使用 socket.io-client 连接到标准的 websocket 吗?

javascript - 我如何访问此 JSON 中此键的值?

javascript - 在javascript中赋值而不是引用

node.js - 使用 connect-ensure-login 进行索引时出现 ERR_TOO_MANY_REDIRECTS