Hintergrund
Im Moment versuche ich, eine App mit couchDB / coachapp zu erstellen, die persistente und wichtige Informationen vom Benutzer speichert und die Schritte für die Benutzeranmeldung mit couchapp festhält.
Im Wesentlichen möchte ich ein einfaches Anmeldeformular erstellen, mit dem Nutzer ein Konto für die Verwendung meiner App registrieren können. Dies würde die Erstellung eines neuen Benutzers in der Datenbank couchdb_users und die Erstellung einer neuen Datenbank mit dem neuen Benutzer, der die Rolle des Datenbankadministrators zugewiesen wird, zur Folge haben.
All das erfordert Server Admin-Anmeldedaten.
Im Idealfall würde ich gerne mit einer der Funktionen jquery.couch.js
telefonieren können, aber es scheint keine sichere Methode dafür zu geben. (oder gibt es ??)
Frage
Was ist der effizienteste und sicherste Weg, um diese Aufgabe auf eine Middle-Layer-Software oder anderweitig zu übertragen?
Mit effizient, ich meine, die geringste Anzahl von Schritten für den Benutzer, nicht unbedingt die geringste Menge an Ärger für mich.
Im Moment habe ich einen separaten node.js-Server eingerichtet, der Anmeldeanforderungen empfängt. Die Anmeldedaten meines CouchDB-Servers werden als vermeintlich private Variablen im Knoten server.js
file gespeichert. Ich poste dann irgendeine DB-Erstellungsanfrage zurück zu couchDB mit couch-client
.
Springe ich hier durch zu viele (potentiell unsichere) Reifen? Gibt es einen besseren Weg, einen sicheren Anmeldeprozess zu gewährleisten?
Danke.
Ein Administrator muss eine Datenbank erstellen und Datenbankadministratoren zuweisen.
Dominics Antwort ist großartig. Eine Alternative ist jedoch, die direkte Coachapp-Architektur beizubehalten und Ihren Admin-Code external außerhalb der Benutzer-Couch-Kette auszuführen.
Stellen Sie beispielsweise in NodeJS eine Verbindung zu CouchDB als Administrator her. Abfrage /_users/_changes?feed=continuous&include_docs=true
. Sie erhalten ein Ereignis Daten in Echtzeit, wenn Benutzer erstellt werden. Wenn Sie einen neuen Benutzer sehen, erstellen Sie die Datenbank und weisen Sie sie als Administrator zu.
Der Client-Code kann nach der neuen Datenbank abfragen. Oder der Client kann /_users
auch über den _changes
COMET-Feed abfragen. Sobald der Browser weiß, dass das Konto eingerichtet wurde, können Sie es dem Benutzer auf der Benutzeroberfläche anzeigen.
Proxies (3-Layer-Architektur) sind großartig. Es gibt nichts, was sie nicht tun können. Allerdings bevorzuge ich die Architektur von "CouchDB mit einem externen Agenten" aus zwei Gründen:
Ich habe node.js so verwendet, wie Sie es beschreiben. Es unterscheidet sich nicht von der Verwendung von Middleware wie PHP für die Kommunikation mit MySQL. So robust wie die API für CouchDB ist, ist es immer noch eine gute Idee, etwas anderes in der Mitte zu verwenden, damit Inhalte ohne die Notwendigkeit von AJAX bereitgestellt werden können. (vor allem, wenn Sie etwas komplizierteres als eine einzelne Entität oder eine Liste von Entitäten benötigen)
Wenn Sie sich für eine direkte CouchApp entscheiden, müssen Sie einen Proxy-Server verwenden, um HTTPS-Anfragen an den CouchDB-Server selbst weiterzuleiten. ( Nginx und Apache sind häufige Beispiele für diesen Anwendungsfall. Wenn Sie das nicht verwenden können, gibt es einen Artikel im Wiki über das Hinzufügen einer Verschlüsselungsschicht zur Clientseite. Ich habe auf dem Wiki herausgefunden, dass native SSL-Unterstützung mit v1.1 hinzugefügt wird (und im Stamm des Quelle)
(Übrigens, all diese Artikel sind mir über " Anleitungen " im CouchDB-Wiki) aufgefallen.