即使在无服务器yaml中设置了params之后,QueryString参数也未得到验证

时间:2018-03-02 08:54:49

标签: aws-lambda serverless-framework

我通过使用无服务器框架部署的lambda函数配置了API网关。我已经在yaml文件中定义了一些queryStringParameters为true。但是,即使在URL中未传递Required(强制)queryStringParams,请求也会通过该服务。 PFB类似的配置。

functions: functionName: name: serviceName handler: handler.handle events: - http: path: /path method: get request: parameters: querystrings: param1: true param2: true

似乎无服务器无法验证param1和param2是否作为queryString传递。我们应该有一个明确的请求验证器吗?是否可以使用无服务器?

2 个答案:

答案 0 :(得分:0)

来这里只是为了寻找一个简单,直接的答案,并且不想按照“ {Request validation using serverless framework”中的建议添加插件。

如果根据需要设置参数并希望对其进行验证,则必须将请求验证器添加到您的 serverless.yml

Resources:
  ParameterRequestValidator:
    Type: AWS::ApiGateway::RequestValidator
    Properties:
      Name: ParameterRequestValidator
      RestApiId:
        Ref: ApiGatewayRestApi
      ValidateRequestBody: false
      ValidateRequestParameters: true

  ApiGatewayMethodNameOfYourApiLookItUpInYourTemplate:
    Properties:
      RequestValidatorId:
        Ref: ParameterRequestValidator

您要验证的方法将被命名为ApiGateway<Method><Get | Post | Patch | Put | Delete >:。将无服务器功能打包到创建的模板文件中时,可以查找名称。

此解决方案的礼节到https://github.com/serverless/serverless/issues/5034#issuecomment-581832806

答案 1 :(得分:0)

对于像我一样也看不到的那些人。

这就是你需要用简单的英语做的事情。

打开

ApiGatewayMethodNameOfYourApiLookItUpInYourTemplate

APIGatewayMethod <1> <2>

API Gateway

就我而言,这是APIGatewayDealsGet

我正在查看的是我在无服务器中的处理程序名称

   list:
    # Defines an HTTP API endpoint that calls the main function in list.js
    # - path: url path is /deals
    # - method: GET request
    handler: list.main
    events:
      - http:
          path: deals
          method: get
          cors: true
          authorizer: aws_iam
          request:
            parameters:
              querystrings:
                country: true
                type: true

或者,如果这不起作用,请检查s3存储桶,将其命名为xxxxxxx-ap-serverlessdeploymentbuck-1epdp60eqveqr并转到无服务器> yyyyyyyyyyy> aaaa> 时间戳>编译后的cloudformation-template.json

然后在其中查找您的方法的名称,示例示例为:

    "ApiGatewayMethodDealsGet": {
        "Type": "AWS::ApiGateway::Method",
        "Properties": {
            "HttpMethod": "GET",
            "RequestParameters": {