React.js JWT Socket.io 认证

4
我正在尝试在使用JWT(Passport JWT)的Express后端中,在React中使用Socket.io。在我的常规路由中,我没有遇到身份验证问题。授权头已发送(Authorization Bearer Token),并在后端进行了检查,但是我不知道如何在从React客户端发送数据时包含Bearer令牌。
我查看了extraHeaders选项,但是无法使它们正常工作。
以下是我的代码:
class Chat extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      username: "",
      message: "",
      messages: []
    };


    this.socket = io("localhost:5000", {
      extraHeaders: {
        Authorization: "My Bearer authorization_token_here"
      }
    });

    this.socket.on("RECEIVE_MESSAGE", function(data) {
      addMessage(data);
    });

    const addMessage = data => {
      console.log(data);
      this.setState({ messages: [...this.state.messages, data] });
      console.log(this.state.messages);
    };

    this.sendMessage = ev => {
      ev.preventDefault();
      this.socket.emit("SEND_MESSAGE", {
        author: this.state.username,
        message: this.state.message
      });
      this.setState({ message: "" });
    };
  }
  render() {jsx code here}

套接字连接已经建立,但我不知道如何将令牌发送到服务器。理想情况下,我会在令牌中发送一个ID,在服务器上解码它并在我的数据库中查找有关用户的更多信息。

节日快乐,感谢任何帮助或提示,以解决我的问题。

1个回答

1
根据文档,extraHeaders仅在transport选项设置为轮询时才能在浏览器中工作。
因此,在服务器端启用轮询并使用以下代码片段。
io({ 
  transportOptions: {
    polling: {
      extraHeaders: {  "Authorization": "My Bearer authorization_token_here" }
    },
  }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接