簡體   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