Socket.io-client: рд╕реЙрдХреЗрдЯ.рд╣реИрдВрдбрд╢реЗрдХ.рдХреНрд╡реЗрд░реА рдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдиреЗ рджреЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 22 рдордИ 2017  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: socketio/socket.io-client

рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐:

  • [x] рдПрдХ рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВ
  • [] рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ

рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░

socket.handshake.query рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ connect рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди reconnect рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд░рд┐рдлреНрд░реЗрд╢ рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рд╕реЙрдХреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдкрд░реЗрд╢рд╛рдиреА рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред

рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рдЪрд░рдг (рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдПрдХ рдмрдЧ рд╣реИ)

//client
io.connect("wss://socket.server.com", {
   query : {
      token:"something dynamic"
   }
});

рдпрджрд┐ рд╕рд░реНрд╡рд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ reconnect , рддреЛ рд╕реЙрдХреЗрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЕрдзрд┐рдХреГрдд рдХрд░рддреЗ рд╕рдордп рдЯреЛрдХрди рдкреБрд░рд╛рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

//server
io.use(function(socket, next) {
   var query = socket.handshake.query;
   if(isValidToken(query.token)){
      next();//will never fire if the token has been updated
   }
});

рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░

рдХреНрд╡реЗрд░реА рдХреЛ function :

io.connect("wss://socket.server.com", {
   query : function(){
      return {
         token:"something dynamic"
      }
   }
});

рд╕реЗрдЯ рдЕрдк

  • рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ рд╕рдВрд╕реНрдХрд░рдг: 2.0.1

рдХреИрд╕реЗ рдареАрдХ рдХрд░реЗрдВ

рд╡рд░реНрддрдорд╛рди рд╕реЙрдХреЗрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ:

if (opts && opts.query) {
   this.query = opts.query;
}

рдЗрд╕рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

if(opts && opts.query) {
   this.query = typeof opts.query == 'function' && opts.query.call(this) || opts.query;
}

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@reeltimedoktor рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЖрдкрдХреЛ query рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ reconnect_attempt рдИрд╡реЗрдВрдЯ рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

socket.on('reconnect_attempt', function () {
  socket.io.opts.query = { token: /* ... */ };
});

рд╕рднреА 9 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

+1
рдмрдЧ #1086 рдХреЗ рд▓рд┐рдП рдлрд┐рдХреНрд╕ рднреА рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдлрд▓ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдмрд╛рдж рдХреНрд╡реЗрд░реА рд╡рд┐рдХрд▓реНрдк рдмрджрд▓рдирд╛ рдкреБрд░рд╛рдиреЗ рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ-рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХреНрд╡реЗрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕рдВрджрд░реНрдн рдЦреЛ рдЧрдпрд╛ :(

@reeltimedoktor рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЖрдкрдХреЛ query рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ reconnect_attempt рдИрд╡реЗрдВрдЯ рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

socket.on('reconnect_attempt', function () {
  socket.io.opts.query = { token: /* ... */ };
});

@darrachequesne рдХрд╛ рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ :(

рдореИрдВ рдкрд░ рд╣реВрдБ socket.io-client рд╕рдВрд╕реНрдХрд░рдг 2.3.0 рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░, рдХреЗ рд╕рд╛рде рдПрдХ рдиреЛрдб рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде socket.io рд╕рдВрд╕реНрдХрд░рдг 2.3.0 ред

рдЧреНрд░рд╛рд╣рдХ рдкрд░ рдореИрдВ рдпрд╣ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ:

 socket.on('reconnect_attempt', async () => {
      const newToken = await getNewToken();
      socket.io.opts.query = {
        token: latestToken,
      };
    });

рдФрд░ рдлрд┐рд░ рд╕рд░реНрд╡рд░ io.use() рдХреЛ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЛрдХрди рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ (рдЬреЛ рд╕реЙрдХреЗрдЯ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдпрд╛ рдлрд┐рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░ рдЖрдЧ рд▓рдЧрдиреА рдЪрд╛рд╣рд┐рдП, afaik?)

рдЗрд╕ рд╕рдордп рд╕рд░реНрд╡рд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреБрди: рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдХрд╣ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЯреЛрдХрди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ - рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирдпрд╛ рдЯреЛрдХрди socket.io.opts.query.token рдХреЛ рдареАрдХ рд╕реЗ рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ - рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдХреНрдпреЛрдВ?

рдзрдиреНрдпрд╡рд╛рдж :)

рдЕрджреНрдпрддрди: рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реЙрдХреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдСрде рдЯреЛрдХрди рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП socket.io.engine.query.token , socket.io.engine.transport.query.token ред рдЬрдм рдЖрдк socket.io.opts.query.token рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрдиреНрд╣реЗрдВ рдмрджрд▓рдирд╛ рдЕрднреА рднреА рд╕рд░реНрд╡рд░ 'рджреЗрдЦрдиреЗ' рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдЕрднреА рднреА рдХреЗрд╡рд▓ рдкреБрд░рд╛рдиреЗ рдЯреЛрдХрди рдХреЛ рджреЗрдЦрддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреЛрдХрди рдХреЛ рд╕реЙрдХреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреБрдЫ рдпреВрдЖрд░рдПрд▓ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдпреВрдЖрд░рдПрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдЗрдиреНрд╣реЗрдВ рднреА рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ?

рдЖрдЧреЗ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рдмрд╛рдж, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░реВрдк рд╕реЗ рдЯреЛрдХрди рдХреА рд╕реНрдерд╛рдкрдирд╛ socket.io.opts.query.token рдкреБрди: рдХрдиреЗрдХреНрдЯ рдкрд░ рдкреБрди: рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЯреЛрдХрди рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ - рдХреБрдЫ рдФрд░ рд╣реА рдореЗрд░реЗ рдРрдк рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рд╣реИ, рд╢рд╛рдпрдж firebase рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЯреЛрдХрди рдкреАрдврд╝реА рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╣реЛ рд░рд╣рд╛ рд╣реИред рддреЛ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЗрд╕ рдкрд░ рдЖрддрд╛ рд╣реИ, @darrachequesne рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

рдареАрдХ рд╣реИ, рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рд╣реИ - рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдЖрдкрдХреЛ 'reconnect_attempt' рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдирдпрд╛ рдЯреЛрдХрди рд╕рдордХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ, рдпрд╛рдиреА рдРрд╕рд╛ рди рдХрд░реЗрдВ:

 socket.on('reconnect_attempt', async () => {
      const newToken = await getNewToken(); // won't work
      socket.io.opts.query = {
        token: latestToken,
      };
    });

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирдпрд╛ рдЯреЛрдХрди рд╕реЗрдЯ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛ред рдпрджрд┐ рдЖрдк рдЯреЛрдХрди рдХреЛ рд╕рдордХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ (рдЗрд╕реЗ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдХреЗ рдФрд░ рдЗрд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдХреЗ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд╢реНрд░реЛрддрд╛ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдХреЗ), рд╕рд░реНрд╡рд░ рдХреЛ рдкреБрди: рдХрдиреЗрдХреНрд╢рди рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рдордп рдкрд░ рдирдпрд╛ рдСрде рдЯреЛрдХрди рдорд┐рд▓рддрд╛ рд╣реИред

"socket.io-client": "3.0.4" рдореБрдЭреЗ TS2341: Property 'opts' is private and only accessible within class 'Manager'. рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИред рдореИрдВ "typescript": "4.1.3" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
image

рдареАрдХ рд╣реИ, рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рд╣реИ - рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдЖрдкрдХреЛ 'reconnect_attempt' рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдирдпрд╛ рдЯреЛрдХрди _рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ, рдпрд╛рдиреА рдРрд╕рд╛ рди рдХрд░реЗрдВ:

 socket.on('reconnect_attempt', async () => {
      const newToken = await getNewToken(); // won't work
      socket.io.opts.query = {
        token: latestToken,
      };
    });

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирдпрд╛ рдЯреЛрдХрди рд╕реЗрдЯ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛ред рдпрджрд┐ рдЖрдк рдЯреЛрдХрди рдХреЛ рд╕рдордХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ (рдЗрд╕реЗ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдХреЗ рдФрд░ рдЗрд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдХреЗ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд╢реНрд░реЛрддрд╛ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдХреЗ), рд╕рд░реНрд╡рд░ рдХреЛ рдкреБрди: рдХрдиреЗрдХреНрд╢рди рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рдордп рдкрд░ рдирдпрд╛ рдСрде рдЯреЛрдХрди рдорд┐рд▓рддрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рд╕рдорд╛рдзрд╛рди рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд╕реЗ disconnect рд▓рд┐рдП рд╣реИ рдЬрдм рдкреНрд░рдорд╛рдгрди рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ disconnect рдИрд╡реЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдкрд░, рд╣рдо async рдкреНрд░реЙрдорд┐рд╕ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХреНрд╡реЗрд░реА/рд╣реЗрдбрд░ рдХрд╛ рдкреБрди: рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рддрдХ рдпрд╣ reconnecting рдИрд╡реЗрдВрдЯ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рддрдм рддрдХ рдХреНрд╡реЗрд░реА/рд╣реЗрдбрд░ рдореЗрдВ рдЗрд╕рдХрд╛ рдирдпрд╛ рдорд╛рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реЛрддрд╛ рд╣реИред

рднрд╡рд┐рд╖реНрдп рдХреЗ рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП:

Socket.IO v2 рдореЗрдВ query рд╡рд┐рдХрд▓реНрдк рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рджреЛрдиреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

  • рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ (рдкреНрд░рдмрдВрдзрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП)
  • Socket.IO рд╣реИрдВрдбрд╢реЗрдХ (рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рдЧреИрд░-рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╛рдо рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП)

рддреЛ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдкрд┐рдЫрдбрд╝реЗ-рд╕рдВрдЧрдд рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ...

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ Socket.IO v3 рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдЖрдк auth рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

// plain object
const socket = io({
  auth: {
    token: "abc"
  }
});

// or with a function
const socket = io({
  auth: (cb) => {
    cb({
      token: "abc"
    });
  }
});

рдЗрд╕реЗ async рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

const socket = io({
  auth: async (cb) => {
    cb({
      token: "abc"
    });
  }
});

рдпрд╣ рд╕рднреА рджреЗрдЦреЗрдВ:

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

ahadcove picture ahadcove  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Warrior-hound picture Warrior-hound  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

BorntraegerMarc picture BorntraegerMarc  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

vadimka123 picture vadimka123  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Tiboonn picture Tiboonn  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ