2017-10-04 14 views
1

Notre API est construite sur parse (parseplatform.org).Sur le serveur d'analyse, existe-t-il un moyen alternatif d'interroger en tant qu'utilisateur, sans objet 'Session'?

J'ai un travail d'arrière-plan qui doit exécuter des requêtes au nom des utilisateurs; il doit s'assurer que les requêtes ne trouvent/mettent à jour que les objets autorisés par l'ACL de l'utilisateur.

Pour la plupart des utilisateurs, je peux interroger la classe Parse.Session pour obtenir le sessionToken pour l'utilisateur donné, puis l'utiliser pour toutes les demandes, par ex. query.find({sessionToken: "r:xxx"}).

Mais pour certains utilisateurs, le seul objet session disponible a expiré, et pour beaucoup, il n'y a aucun objet session. Pour autant que je sache, créer Parse.Session instances n'est pas possible; le seul moyen de générer une session est d'appeler le Parse.User.logIn; mais ce n'est pas une option pour nous, principalement parce que nous aurions besoin du mot de passe de l'utilisateur (que nous n'avons pas), mais aussi parce qu'il en résulte des fuites de mémoire sur les environnements parse-server.

Quelqu'un at-il trouvé une solution pour cela?

Répondre

1

Pour les travaux de fond où il n'y a pas l'utilisateur, vous devez utiliser les éléments suivants

query.find ({useMasterKey: true}); UseMasterKey contournera toutes les restrictions de sécurité de l'ACL. Parfait pour les travaux par lots. Faites juste attention à ce que tout ce qui appelle ce code utilise également la clé masterKey. Parfois, je vais ajouter le code suivant avant d'assurer que l'accès correct est utilisé

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

query.find(findOptions); 
+0

Merci Alon, mais je ne veux pas utiliser la clé de maîtrise car cela retournera des objets que l'utilisateur n'est pas censé voir - Je dois seulement trouver des objets qui tombent dans les droits de lecture de l'utilisateur les objets à eux - ils peuvent le charger sur leur compte. –

+0

Essayez d'utiliser la méthode 'devenir'. Vous ne savez pas si vous avez stocké la sessionToken quelque part mais si vous le faites, vous pouvez l'utiliser http://parseplatform.org/Parse-SDK-JS/api/classes/Parse.User.html#methods_become –

+0

t avoir sessionTokens stocké pour certains utilisateurs qui provoque ce problème; aussi la méthode 'devenir' n'est pas sûre dans le code de nuage. –

1

Selon ce que vous essayez de faire, vous pourriez avoir besoin pour exécuter le code quand se connectent (et par conséquent vous avez un jeton de session).

Vous pouvez également essayer d'exécuter le code avec les clés principales, mais cela présente ses propres problèmes.

+0

J'essaie de faire quelque chose en arrière-plan pour eux (organiser/accéder à leur contenu) afin que nous puissions les envoyer par courriel lorsque de nouvelles choses sont prêtes? Je pourrais utiliser les clés principales mais cela me donnerait accès à des informations auxquelles ils n'ont pas accès, donc je ne suis pas sûr que ce soit la bonne façon de le faire? S'il n'y a pas d'autre moyen, je vais essayer avec l'exécution du code quand ils se connectent plutôt que de le faire en tâche de fond –