微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无服务器响应中的自定义错误消息

如何解决无服务器响应中的自定义错误消息

我正在使用 node js serverless v2 框架。我已经知道回调只接受 Allow、Deny 和 Unauthorized 作为参数。我正在使用自定义授权器进行资源保护。我需要在无法实现的回调中发送自定义错误消息。以下是我尝试过但失败的方法列表

一段代码

if (!response.data) {
    return callback(null,generateAuthResponse(decoded.id,'Deny',methodArn));
}
if (response.data && response.data.status === 'active') {
    return callback(null,'Allow',methodArn));
}
if (response.data && response.data.status == 'inactive') {
    return callback(null,methodArn));
}

我想发送自定义错误消息,而不是 return callback(null,methodArn)); 拒绝。

#1

return callback(null,"Session expired");

#2

return callback(null,{
            statusCode: 403,headers: {
                'Content-Type': 'application/json','Access-Control-Allow-Headers': 'Content-Type','Access-Control-Allow-Origin': '*','Access-Control-Allow-Methods': 'OPTIONS,POST,GET','Access-Control-Allow-Credentials': true,},body: JSON.stringify({
                error: error
            })
        }); 

#3

return {
                statusCode: 403,headers: {
                    'Content-Type': 'application/json',body: JSON.stringify({
                    error: error
                })
            }

#4

throw Error('Session expired')

所有人要么用 x-amzn-errortype: AuthorizerConfigurationException 抛出 cors 错误,要么拒绝(调用错误)。有没有办法发送自定义错误响应?

解决方法

很可能是语法错误。

试试这个:

    let response_object = {
        statusCode: 200,headers: {
            "Access-Control-Allow-Headers" : "Content-Type","Access-Control-Allow-Origin": "*","Access-Control-Allow-Methods": "OPTIONS,POST,GET"
        },body: JSON.stringify("Some Custom Error")
    };
    return response_object;
,

使用 ACCESS_DENIEDResponseTemplates 响应创建和设置资源。

无服务器.yml

...
resources:
  Resources:
    DenyFailureGatewayResponse:
      Type: 'AWS::ApiGateway::GatewayResponse'
      Properties:
        ResponseParameters:
          # Config your header response
          gatewayresponse.header.Access-Control-Allow-Origin: "'*'"
          gatewayresponse.header.Access-Control-Allow-Headers: "'*'"
        ResponseTemplates:
            # Custom response object
            application/json: |
              {
                "success":false,"message":"$context.authorizer.errorMessage"
              }
        # Setup only for ACCESS_DENIED type
        ResponseType: ACCESS_DENIED
        RestApiId:
          Ref: 'ApiGatewayRestApi'
        StatusCode: '403'
...

如果您需要自定义消息,请在您的 generateAuthResponse 函数中更新您的 authResponse 对象。

const generateAuthResponse = (principalId,effect,resource,errorMessage = null) => { // I guest function will look like that
  // ... do something

  // before return,let custom your error message
  if(effect.toLowerCase() === 'deny' && errorMessage !== null){
    authResponse.context = {
      // Key to map with $context.authorizer.errorMessage
      "errorMessage": errorMessage,};
  }

  return authResponse;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。