2017-10-04 2 views
1

Unsere API basiert auf parse (parseplatform.org).Gibt es auf Parse-Server eine alternative Möglichkeit, als Benutzer ohne ein 'Session'-Objekt abzufragen?

Ich habe einen Hintergrundjob, der Abfragen im Auftrag von Benutzern ausführen muss; Es muss sichergestellt werden, dass die Abfragen nur Objekte finden/aktualisieren, die die ACL des Benutzers zulässt.

Für die meisten Benutzer kann ich die Parse.Session Klasse abfragen, um die sessionToken für den angegebenen Benutzer zu erhalten, und dann diese für alle Anfragen verwenden, z. query.find({sessionToken: "r:xxx"}).

Aber für einige Benutzer ist das einzige verfügbare session Objekt abgelaufen, und für viele gibt es keine session Objekte überhaupt.

Soweit ich weiß, ist das Erstellen von Parse.Session Instanzen nicht möglich; Die einzige Möglichkeit, eine Sitzung zu erstellen, ist der Aufruf Parse.User.logIn; Dies ist jedoch keine Option für uns, hauptsächlich weil wir das Passwort des Benutzers benötigen (was wir nicht haben), aber auch, weil es zu Speicherlecks in Umgebungen parse-server führt.

Hat jemand eine Lösung dafür gefunden?

Antwort

1

Für Hintergrundjobs, wo es keine Benutzer Sie folgende

query.find ({useMasterKey: true}) verwendet werden soll;

useMasterKey wird alle ACL-Sicherheitseinschränkungen umgehen. Perfekt für Batch-Jobs.

Seien Sie vorsichtig, dass alles, was diesen Code aufruft, auch den MasterKey verwendet. Manchmal werde ich den folgenden Code hinzufügen, bevor um sicherzustellen, dass der korrekte Zugriff verwendet wird

var findOptions={}; 
if (request.user){ 
    findOptions = {sessionToken:request.user.getSessionToken()}; 
} else { 
    findOptions = {useMasterKey:true}; 
} 

query.find(findOptions); 
+0

Danke Alon, aber ich möchte nicht den Mastery-Schlüssel verwenden, da das Objekte zurückgibt, die der Benutzer nicht sehen sollte - ich muss nur Objekte finden, die in die Leserechte des Benutzers fallen, damit ich es schließlich sende die Objekte an sie - sie können sie auf ihr Konto laden. –

+0

Versuchen Sie es mit der Methode 'wird'. Nicht sicher, ob Sie das sessionToken irgendwo gespeichert haben, aber wenn Sie das tun, können Sie das http://parseplatform.org/Parse-SDK-JS/api/classes/Parse.User.html#methods_become verwenden. –

+0

Es ist die Tatsache, dass wir es nicht tun. Ich habe sessionTokens für einige Benutzer gespeichert, die dieses Problem verursachen. auch die Methode 'wird' ist im Cloud-Code nicht sicher. –

1

Je nachdem, was Sie versuchen zu tun, Sie können nur den Code ausführen müssen wenn sie einloggen (und damit Sie haben ein Sitzungstoken).

Sie könnten auch versuchen, den Code mit den Hauptschlüsseln auszuführen, aber das bringt seine eigenen Probleme mit sich.

+0

Ich versuche, einige Dinge im Hintergrund für sie zu tun (Organisation/Zugriff auf ihre Inhalte), so dass wir ihnen eine E-Mail senden können, wenn neue Dinge bereit sind? Ich könnte die Hauptschlüssel verwenden, aber dann bekomme ich Zugang zu Informationen, auf die sie keinen Zugriff haben, also bin ich mir nicht sicher, ob das der richtige Weg ist? Wenn es keinen anderen Weg gibt, werde ich es mit dem Ausführen des Codes versuchen, wenn sie sich anmelden, anstatt es als Batch-Hintergrund-Job zu tun –

Verwandte Themen