2016-08-29 5 views
0

Dies ist mein Setup Ein Fall von Socket-IO-Authentifizierung verwenden -Reisepass mit Node-Express und MongoDB

Drei verschiedene Servern mit drei verschiedenen Knoten js Anwendung auf drei verschiedenen EC2-Server.

Server 1 - laufende Hauptanwendung.

Server 2 - laufende admin Anwendung.

Server 3 - laufende Dienstanbieter-Anwendung.

Jeder Server verwendet dieselbe MongoDB-Datenbank, da sie Sammlungen gemeinsam nutzen müssen.

So habe ich -

Server 4 - Datenbankserver - läuft Mongo DB.

In der Datenbank gibt es drei Sammlungen drei Arten von Benutzern darstellt -

1] Hauptnutzer 2] Benutzer Admin 3] Dienstleister

Jede Art von Benutzer anmeldet in seine eigene NodeJS Anwendung, die von den entsprechenden Verbindungs Server mit verschiedenen Client-Anwendungen.

Zum Beispiel Admin Benutzer verbindet sich mit Server 2 und meldet sich in der Admin-Anwendung.

Für den Login-Pass wird verwendet, und Sitzungen werden in Mongo db gespeichert, mit connect-mongo. Alle Sitzungen aller Benutzertypen werden in derselben Sitzung in Mongo DB gespeichert.

Das Problem -

Jetzt möchte ich ein Meldesystem mit socket.io implementieren. Jeder Benutzertyp verfügt in seinem Modell über ein Benachrichtigungs-Subdokument-Array. So etwas wie diese -

Hauptanwender Schema

   { 
       .... 

       notifications : [{ text : String , date : Date}] 

       } 

Admin Benutzer Schema

   { 
       .... 

       notifications : [{ text : String , date : Date}] 

       } 

Dienstleister Schema

   { 
       .... 

       notifications : [{ text : String , date : Date}] 

       } 

Wenn ein Hauptnutzer Bücher der Dienst von bestimmten Service-Provider, Zuerst würde die Dienstbuchungsinformation gespeichert werden, dann würde eine Benachrichtigung in den Dienst gestellt werden Vice-Provider-Benachrichtigungs-Array. Wenn der Dienstanbieter online ist, sollte die Benachrichtigung an die Clientanwendung des Dienstanbieters gesendet werden.

Dafür versuche ich Socket.io zu verwenden.

Mein Ansatz

Aufbau eines neuen Servers für Push notifications-

Server 5 - Notification Server.

Dieser Server führt einen socket.io-Server aus. Wann immer sich ein Benutzer über die entsprechende Client-Anwendung bei der entsprechenden Anwendung von joint js anmeldet, stellt er nach erfolgreicher Anmeldung auch eine Verbindung mit diesem Benachrichtigungsserver her.

Wenn nun ein MainUser einen Dienst eines bestimmten Dienstanbieters bucht, würde die Hauptserveranwendung eine Benachrichtigung in das Benachrichtigungsfeld des Dienstanbieters in seinem Dokument einfügen. Danach würde er eine Anfrage an den Benachrichtigungsserver senden, um eine Benachrichtigung auf dem durch die ID des Dienstanbieters spezifizierten Kanal zu senden, so dass, wenn der Dienstanbieter online ist, er sofort die Benachrichtigung über seine Clientanwendung erhält.

Aber wie stelle ich sicher, dass die Benutzer, die eine Verbindung zu meinem Socket IO-Server herstellen, seriös sind. Wenn ein Benutzer eine Verbindung zum Socket-IO-Server herstellen und den Kanal eines anderen Benutzers abhören kann, erhält er irgendwie die ID eines anderen Benutzers und erhält alle Benachrichtigungen eines anderen Benutzers. Ich möchte, dass der Benachrichtigungsserver die Sitzungssammlung in der Mongo DB-Datenbank betrachtet und überprüfen Sie, ob der verbundene Benutzer authentifiziert ist und die richtige Benutzer-ID hat.

Antwort

0

aus Ihrem Post Ich nehme an, Sie Express verwenden, Express-Sitzung und Socket.io

Sie eine Middleware hinzufügen können, um Sie Socket.io dass Ihre ausdrückliche Sitzung Ihre socket.io Steckdose verbindet.

Die expressSessionMiddleware ist eine Instanz der Middleware "express-session", die in der Hauptanwendung identisch mit der Sitzungs-Middleware konfiguriert werden sollte.

socketio = require "socket.io" 
io  = socketio() 

io.use (socket, next) -> 
    expressSessionMiddleware socket.handshake, {}, next 

Sie erhalten dann Zugriff auf die Sitzung auf socket.handshake.session haben

Ein Beispiel Modul, das dies tut hier gefunden werden kann: https://github.com/xpepermint/socket.io-express-session

Verwandte Themen