2017-03-19 6 views
0

Ich versuche Preprocessing zu tun, um meine Apollo-Server (Graphql) Resolver-Ergebnisse basierend auf der Benutzer-Authentifizierung (die in einem Token in meiner Kopfzeile ausgedrückt wird) zu scope. Ich bin der beste Weg, nicht sicher, dies zu tun, und das ist, was ich bisher:Scoping graphql Ergebnisse mit Hapijs Pre-Funktionalität

// Graphql Options 
const GraphqlOptions = { 
          schema: executableSchema, 
          debugging: true, 
       ---->  pre: [{ method: preMongoose, assign: 'm1'}], 
          context: { 
           user: Mongoose.model('User'), 
           SomethingElse: Mongoose.model('SomethingElse') 
          } 
         }; 

In meiner preMongoose Datei

'use strict'; 

const preMongoose = (request, reply) => { 

    // code to modify mongoose model's pre to only return results based off 
    // request's auth token 

}; 

module.exports = preMongoose; 

Antwort

0

Ok ich eine Lösung gefunden. Sie geben Ihnen die Möglichkeit, die Anfrage in den Optionen des server.register abzufangen. Dies ist, wie ich es tue:

{ 
     register: graphqlHapi, 
     options: { 
     path: '/graphql', 
     graphqlOptions: (request) => { 

     return new Promise((resolve, reject) => { 

      // a function that passes the scoping info in the response 
      getScopableData(request, (err, res) => { 
       if (err) { 
       return reject(err); 
       } 

       // add scoping data 
       GraphqlOptions.context.scopingOptions = res; 

       return resolve(GraphqlOptions); 
      }); 
     }); 
     } 
} 

Sie werden nun dieses Feld für den Zugriff in Ihrem Kontext der Lage sein, wenn die Resolver zu schreiben. Ich musste hineingehen und die Resolver modifizieren, um nur Dinge abzufragen, die meinen Scope-Kriterien entsprachen.