2017-05-07 2 views
0

Ich füge eine Auth-Ebene hinzu und ich denke, dass ich es bis auf ein kniffliges Detail herausgefunden habe. Meine Meteor-App hat keine Routen, aber ich habe einen Haken in die Verbindungs-Middleware eingefügt, so dass die "/" Fehler routen, wenn es kein richtiges API-Token gibt. Wenn das Token in Ordnung ist, rufe ich next() an, um die Route zu Meteor weiterzuleiten.Pro-Anfrage-Sitzung im Meteorserver?

Das Problem ist, dass ich je nach Token serverseitige Parameter für die Verbindung festlegen muss, und ich weiß nicht, wie dies zu tun ist. Angenommen, ich habe eine statische Liste von API-Schlüsseln, die Berechtigungsebenen zugeordnet sind. Wenn ein Benutzer eine Anfrage mit "ADMIN_API_KEY" sendet, möchte ich Session.permission_level = "admin" für die Nutzung durch die Meteor-Server-Funktionen setzen. Session ist nur für den Kunden in Meteor, obwohl.

In Rails würde ich nur session[:permission_level] = "admin" sagen. Aber so scheint es in Meteor nicht zu funktionieren.

Übrigens, ich benutze noch kein Routing-Paket in Meteor, obwohl das das einfacher machen würde als ich.

Antwort

1

Ich bin nicht sicher über Session Ich habe für meine REST api

import { DDP } from 'meteor/ddp'; 
import { DDPCommon } from 'meteor/ddp-common'; 

export const authMiddleware = (req, res, next) => { 
    const userId = identifyUser(req); // parse the request to get the token you expect 
    if (!userId) { 
    return next(); 
    } 

    DDP._CurrentInvocation.withValue(new DDPCommon.MethodInvocation({ 
    isSimulation: false, 
    userId, 
    }),() => { 
    next(); 
    // in that context, Meteor.userId corresponds to userId 
    }); 
}; 

wie etwas getan und das funktioniert gut in Bezug auf die Benutzer-ID und in der Lage Meteor-Funktion aufrufen, die in einem werden aufrufen sollte DDP Kontext, wie Users.find(...).

+0

Das Problem ist, dass ich keinen angemeldeten Benutzer in diesem Stadium habe, so konnte ich keine gültige Benutzer-ID –

+0

ich sehe. Ich bin mir nicht sicher, was der beste Weg ist, Dinge wie Session zu verwenden, die global aussehen, aber tatsächlich mit einem bestimmten Kontext verknüpft sind. Ich habe am Ende alle Parameter übergeben und Meteor als ein einfaches Knoten Backend in diesen Fällen verwendet – Guig

+0

Blick in die Methoden zur Meteor sehe ich dort ist UID, die im Grunde ist Sessoon-ID –