繁体   English   中英

React-native Redux socket.io会话身份验证

[英]React-native Redux socket.io session authentication

有关 http请求之后将redux / react-native连接到socket.io的任何建议吗? 我需要先创建一个http请求来存储一个auth会话cookie,然后连接到socket.io。 我见过的所有例子(即https://www.npmjs.com/package/redux-socket.io )都会立即连接到socket.io。 我的想法是在自定义redux中间件中听取操作和连接:

import React from 'react-native'
import * as actions from './actions/';
import io from 'socket.io-client/socket.io';

export default socketMiddleware = (store) => {
    return next => action => {
    const result = next(action);
    // var socket = io();
    //
    if (action.type === 'HTTP_CONNECT_SUCCEEDED') {
      debugger;
      const socket = io('localhost:3000', {jsonp: false);
      socket.on('connect', function(){console.log('Connected!')});
    }
    //
    // socket.on('message', data => {
    //   store.dispatch(actions.addResponse(data));
    // });
    //
    // if (socket && action.type === actions.ADD_MESSAGE) {
    //   let messages = store.getState().messages;
    //   socket.emit('message', messages[messages.length -1]);
    // }

    return result;
  };
}

这适用于连接,但我必须在'HTTP_CONNECT_SUCCESS'条件内定义我的套接字,因此我的其他套接字操作和事件是未定义的,直到该操作发生。 如何在操作上连接到WS并公开我的套接字事件和其他操作?

希望暂时的hack是使我的socket变量全局,并将事件包装在条件中:

import React from 'react-native'
import * as actions from './actions/';
import io from 'socket.io-client/socket.io';

export default socketMiddleware = (store) => {
  return next => action => {

    const result = next(action);
    globalSocket = typeof globalSocket === 'undefined' ? false : globalSocket

    if (action.type === 'HTTP_CONNECT_SUCCEEDED') {
      globalSocket = io('http://localhost:3000', {jsonp: false});
      globalSocket.on('connect', () => {
        console.log('Connected!')
      });
    }

    if (globalSocket != false) {
      globalSocket.on('friends', data => {
        store.dispatch(actions.updateFriends(data));
      })

      if (action.type === 'CREATE_QUESTION') {
        globalSocket.emit('createQuestion', action.question);
      }
    }

    return result;
  };
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM