2016-07-29 2 views
0

Я использую Serverless-Authentication-boilerplate и хочу нанести на карту пользовательский ответ об ошибке. Но он всегда возвращает 500 ошибок.пользовательские авторизаторы в Amazon API Gateway 500 error

authorize.js

// Authorize 
function authorize(event, callback) { 
    let providerConfig = config(event); 
    try { 
    let data = utils.readToken(event.authorizationToken, providerConfig.token_secret); 
    console.log("Decrypted data: " + JSON.stringify(data)); 

    let methodArn = event.methodArn.replace(/(GET|POST|PUT|DELETE)/g, '*').replace(/mgnt.+/g, 'mgnt/*'); 

    console.log(`Change methodArn to: ${methodArn}`); 

    // TODO: handle expiration time validation 
    callback(null, utils.generatePolicy(
     data.id, // which is $context.authorizer.principalId 
     'Allow', 
     methodArn)); 
    } catch (err) { 
    console.log(err); 
    callback('401 Unauthenticated'); 
    } 
} 

з-function.json

responses:{ 
    "401 Unauthenticated.*": { 
     "statusCode": "401" 
    }, 
    "default": { 
     "statusCode": "200", 
     "responseModels": { 
     "application/json;charset=UTF-8": "Empty" 
     }, 
     "responseTemplates": { 
     "application/json;charset=UTF-8": "" 
     } 
    } 
} 

ответ

2

После попросить Amazon Web Services.

К сожалению, сопоставление Авторизатора в настоящее время не настраивается, и каждая возвращаемая ошибка из лямбда-функции будет сопоставляться с кодом состояния 500 в шлюзе API. Более того, отображение выполняется в точном совпадении строк для вывода, поэтому, чтобы вернуть предполагаемую ошибку 401 клиенту, вы должны выполнить вызов «context.fail (« Unauthorized ») ;.

Наконец, я меняю

callback('401 Unauthenticated'); 

в

context.fail('Unauthorized'); 

и прекрасно работают.

Обмен, с которым может столкнуться это.

+0

Является ли это документально зарегистрированным в AWS? – dashmug

+0

Здесь [REF] (http://docs.aws.amazon.com/apigateway/latest/developerguide/use-custom-authorizer.html) – Jim