Ошибка пользовательских авторизаторов в Amazon API Gateway 500
Я использую шаблон Serverless-Authentication-шаблон и хочу отобразить пользовательский ответ об ошибке. Но это всегда возвращает 500 ошибок.
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');
}
}
S-function.json
responses:{
"401 Unauthenticated.*": {
"statusCode": "401"
},
"default": {
"statusCode": "200",
"responseModels": {
"application/json;charset=UTF-8": "Empty"
},
"responseTemplates": {
"application/json;charset=UTF-8": ""
}
}
}
1 ответ
Решение
После попросите Amazon Web Services.
К сожалению, отображение Авторизатора в настоящее время не настраивается, и каждая возвращаемая ошибка лямбда-функции будет отображаться в код состояния 500 в шлюзе API. Кроме того, сопоставление выполняется для точного совпадения строк выходных данных, поэтому, чтобы вернуть клиенту предполагаемую ошибку 401, необходимо выполнить вызов context.fail("Unauthorized");
Наконец я меняю
callback('401 Unauthenticated');
в
context.fail('Unauthorized');
и работать нормально.
Поделиться с кем может столкнуться с этим.