首页 > 解决方案 > 从客户端传递 auth 参数时未调用 socket.io“连接”事件

问题描述

我有一个套接字 io 服务器,我的前端是反应,我使用客户端中的 auth 参数将身份验证令牌传递给服务器以连接到服务器,但是当我尝试一个没有任何参数的普通 url 时,连接服务器端的事件被触发,但是当我在客户端传递 auth 参数时,连接事件不会被触发

这是客户端代码:

import io from "socket.io-client";
import apiUrl from "./getApiUrl";

var socket = undefined;

const connectToServer = (token) => {
  socket = io(apiUrl, {
    auth: token,
  });
};

const disconnectServer = () => {
  if (socket) {
    socket.disconnect();
  }
};

export { connectToServer, disconnectServer, socket };

这是服务器代码:

const express = require("express");
const dotenv = require("dotenv");
dotenv.config();

const app = express();
const http = require("http").createServer(app);
const io = require("socket.io")(http);

// These imports are to create tables in the db when the server starts, Do not delete these
const User = require("./models/User");
const Folder = require("./models/FileObject");
const Block = require("./models/Block");
const Token = require("./models/Token");

// Event handlers imports
const registerFileObjectHandlers = require("./eventHandlers/fileobject");

// Authentication middleware

const onConnection = (socket) => {
  console.log("connection");
  console.log(socket.handshake.auth); // prints { token: "abcd" }
  registerFileObjectHandlers(io, socket);
};

io.on("connection", onConnection);

const PORT = 5000 || process.env.PORT;

http.listen(PORT, () => {
  console.log(`Server started on ${PORT}`);
});

标签: node.jsreactjssocket.io

解决方案


推荐阅读