2016-06-26 9 views
0

Ich verwende HapiJS für meine REST-API. Ich benutze auch Scopes-Funktionalität, um einfachen rollenbasierten Zugriff auf Ressourcen zu implementieren. Beispiel Routenkonfigurationsobjekte wie folgt aussieht:HapiJS-Bereiche: Benutzerdefinierte Fehlermeldung anstelle von "Unzureichender Bereich"

{ 
    method: 'GET', 
    path: '/users/{userID}', 
    config: { 
     auth: { 
      access: { 
       scope: ['user-{params.userID}'] 
      } 
     }, 
     handler: getUserHandler 
    } 
} 

standardmäßig, wenn derzeit authentifizierten Benutzer nicht scope gegebenen Endpunkt erforderlich muss für den Zugriff auf (. ZB scope: 'user-1' bei dem Versuch, /users/1 GET), gibt es eine Fehlerantwort zurückgegeben:

{"statusCode":403,"error":"Forbidden","message":"Insufficient scope"}

Was ich will, ist ersetzen diese 403 Fehler mit einem benutzerdefinierten Statuscode und Fehlermeldung - ich möchtezurückzukehrenstattdessen. Und ich möchte dies nur für bestimmte Endpunkte tun. Ist das möglich?

Antwort

1

Sie können es tun server.ext('onPostHandler', (request, reply) => {... durch

Sie können die route und response Objekt innerhalb Anfrage erhalten.

Das response Objekt enthält isBoom, wenn es wahr ist, sollten Sie die response.output.statusCode erhalten, die Sie bestätigen können, wenn es 403 ist.

Das Objekt route enthält die path, die Sie validieren können, wenn es der gewünschte Endpunkt ist.

Etwas wie folgt aus:

server.ext('onPostHandler', (request, reply) => { 
 

 
    const response = request.response; 
 

 
    if (response.isBoom && 
 
    response.output.statusCode === 403 && 
 
    request.route.path === 'your_endpoint') { 
 
    
 
    // your code here 
 
    } 
 

 
    return reply.continue(); 
 
});