2016-10-12 2 views
1

Was ist eine gute Strategie, um einen Endpunkt als öffentlich zugänglich zu machen? Unsere Taffy-API verfügt über Authentifizierung in jedem Endpunkt, aber wir möchten auch einige Endpunkte ohne Authentifizierung verfügbar machen. Meine anfängliche Strategie ist die Erstellung eines anderen Ordners in den Ressourcen/public, der die Authentifizierung umgehen kann.Einen Endpunkt als öffentlich verfügbar machen

Wir haben 2 Möglichkeiten zur Authentifizierung. 1. beglaubigen einen API-Schlüssel in der Anfrage 2. Standardauthentifizierung mit

Unsere onTaffyRequest

function onTaffyRequest(verb, cfc, requestArguments, mimeExt){ 
      local.status = "forbidden"; 
      local.invalidReturnData = representationOf(local.status).withStatus(401); 


      if(structKeyExists(arguments.requestArguments, "apiKey")){ 

      } 


      /* CATCH NO BASIC auth*/    
      //if username is blank return false 
      if (structAuth.username is ""){ 
       return local.invalidReturnData; 
      } 

      //check invalid password 
      if(structAuth.password is ""){ 
       return local.invalidReturnData; 
      } 

    return true; 
} 

Antwort

3

Seit Taffy version 2.1.0 kann onTaffyRequest mehr Argumente akzeptieren:

function onTaffyRequest(verb, cfc, requestArguments, mimeExt, headers, methodMetadata){ 
    ... 
} 

(Version 3.0.0 auch angehängt matchedURI zu dieser Liste)

Das Argument methodMetadata wurde für diesen Zweck hinzugefügt. Fügen Sie etwas wie allow_public="true" hinzu und überprüfen Sie dies.

someResource.cfc:

component 
extends="taffy.core.resource" 
taffy:uri="/foo" 
{ 
    function get() allow_public="true" { 
     return rep({ echo: arguments }); 
    } 
} 

Application.cfc:

function onTaffyRequest(verb, cfc, requestArguments, mimeExt, headers, methodMetadata, matchedURI){ 
    if (methodMetadata.keyExists("allow_public") && methodMetadata.allow_public == true){ 
     return true; 
    } 

    // your existing auth-enforcement code should go here 
} 
+0

Mann, aus dem Mund Pferde. – Leeish

+0

Die Methode Metadata.keyExists ("allow_public") funktionierte nicht in CF10 Ich änderte es in if (StructKeyExists (methodMetadata, "allow_public") && methodMetadata.allow_public == true) und funktioniert nun großartig. Danke – Vlad

+0

Ja, da Sie keine Version von ACF angegeben haben, nahm ich gerade an, dass die neueste Syntax in Ordnung war. Ich bin froh, dass du es herausgefunden hast. –

Verwandte Themen