2016-10-12 7 views
1

Что такое хорошая стратегия, чтобы разоблачить конечную точку как общедоступную. Наш Taffy API имеет аутентификацию в каждой конечной точке, но мы также хотим выявить некоторые конечные точки без аутентификации. Моя первоначальная стратегия создает другую папку в ресурсах, называемых/public, которые могут обойти аутентификацию.Вывести конечную точку как общедоступную

У нас есть 2 способа аутентификации. 1. Выполните проверку подлинности с помощью ключа API в запросе 2. Базовая аутентификация

Наша 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; 
} 

ответ

3

С Таффи version 2.1.0, onTaffyRequest может принять больше аргументов:

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

(Version 3.0.0 также прилагается matchedURI)

Для этой цели был добавлен аргумент methodMetadata. Добавьте к нему что-то вроде allow_public="true" и осмотрите его.

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

Человек, изо рта лошади. – Leeish

+0

методMetadata.keyExists ("allow_public") не работал в CF10. Я изменил его на if (StructKeyExists (methodMetadata, "allow_public") && methodMetadata.allow_public == true) и теперь отлично работает. Спасибо – Vlad

+0

Да, поскольку вы не указали версию ACF, я просто предположил, что самый последний синтаксис был в порядке. Рад, что ты это понял. –

Смежные вопросы