Meteor Iron-Router Server-Seite nur Route, wie der aktuelle Benutzer zu erhalten?

8

Bei einer Nur-Server-Route: Wie kann ich den aktuellen Benutzer abrufen?

Bitte beachten Sie, dass dies eine Route ist, die wie folgt aussieht:

%Vor%

Dies ist nicht in einem Veröffentlichungs- oder Methodenaufruf, daher schlägt Meteor.user () / Meteor.userId () fehl.

Ich habe in der route.params nachgesehen und es wurde keine Benutzer-ID festgelegt.

    
Pat 23.04.2014, 18:39
quelle

2 Antworten

8

Das funktioniert bei mir in 0.8:

if(this.request.cookies.meteor_login_token) u = Meteor.users.findOne({"services.resume.loginTokens.hashedToken": Accounts._hashLoginToken(this.request.cookies.meteor_login_token)});

Ich bin im Grunde Hashing der rohen Meteor Login-Token mit der% Co_de% -Funktion, die die Übereinstimmung mit dem Hash-Token in der DB gespeichert.

    
Alethes 17.07.2014 10:36
quelle
6

Sie können dies auf der Serverseite nicht wirklich tun, ohne Cookies auf der Client-Seite zu setzen, wenn Sie sich anmelden.

Meteor speichert das Authentifizierungs-Token des Benutzers in localStorage , das erst später im HTTP-Header-Stadium verfügbar ist Die Seite wird auf Client-Seite JavaScript geladen.

Wenn Sie auf den Wert in den Headern auf die Weise zugreifen möchten, wie Sie es tun, müssten Sie ein Cookie setzen, wenn sich der Benutzer mit dem Token des Benutzers anmeldet.

Das Benutzer-Token befindet sich im lokalen Speicher / Meteor.loginToken & amp; Benutzer-ID bei Meteor.userId() .

Dann überprüfe diesen Wert mit dem Anfrage-Header und finde das Token unter den gespeicherten Tokens des Benutzers in der users Sammlung in mongodb bei services.resume.loginToken .

Es besteht ein erheblicher Sicherheitsvorbehalt, da Ihr loginToken mehr verfügbar ist und für den Zugriff auf das Konto verwendet werden kann.

Wie arbeitet Meteor mit Logins

?

Meteor baut eine DDP-Verbindung über Websockets auf. Wenn die Webseite mit einem vorherigen "gespeicherten" Anmeldestatus geladen wurde, werden diese loginTokens mithilfe von JavaScript mit der lokalen Speicher-API gelesen. DDP ist eine Kommunikationsschicht über Websockets oder Socks, mit denen Meteor mit dem Server kommuniziert.

Die Anmeldung erfolgt über das DDP-Protokoll, nachdem das Javascript geladen wurde. Dies ist der Hauptgrund, warum Sie dies nicht direkt mit einer serverseitigen Route tun können, da Sie auf diese Weise keinen Zugriff auf DDP haben würden, da Meteor-Bibliotheken nicht verfügbar sind und zu diesem Zeitpunkt keine DDP-Verbindung hergestellt wird, wenn die HTTP-Anforderung gesendet wird / p>

Meteor Anruf & amp; subscribe-Methoden verwenden diese Anmeldung, um sich zu authentifizieren, um Methoden auf dem Server zu veröffentlichen, die alle auf der DDP-Verbindung auftreten.

Diese Antwort sollte auf die Besonderheiten der Anmeldung eingehen: Authentifizieren mit Meteor über DDP (und SRP?)

    
Akshat 23.04.2014 19:14
quelle

Tags und Links