Aws lambda lambda的授权调用,不需要授权即可选择获取用户名

Aws lambda lambda的授权调用,不需要授权即可选择获取用户名,aws-lambda,aws-api-gateway,serverless-framework,Aws Lambda,Aws Api Gateway,Serverless Framework,我有一个lambda函数获取配置文件。它返回的用户配置文件与instagram配置文件类似。它有一个follow按钮,根据查看器是否登录,其行为会有所不同。如果查看者已登录并且已经跟踪用户,则按钮文本将显示unfollow。 我的lambda函数没有授权,因为我希望站点的每个访问者都能够查看用户配置文件。serverless.yml设置如下所示: handler: api/get-profile.handler events: - http: pa

我有一个lambda函数获取配置文件。它返回的用户配置文件与instagram配置文件类似。它有一个follow按钮,根据查看器是否登录,其行为会有所不同。如果查看者已登录并且已经跟踪用户,则按钮文本将显示unfollow。 我的lambda函数没有授权,因为我希望站点的每个访问者都能够查看用户配置文件。serverless.yml设置如下所示:

    handler: api/get-profile.handler
    events:
      - http:
          path: users/{id}
          method: get
          cors: true
现在,如果登录用户调用此函数,我希望收到其他信息,这样我就可以知道a是否已经在跟踪B。如何在同一函数中处理授权和未授权的情况? 我正在使用aws iam进行授权。 我最好的办法是创建另一个函数,获得配置文件授权,但这样我就有两个不同的端点需要调用,另外还有react应用程序中的额外案例处理。另一个选择是创建一个自定义授权程序,它要求我自己编写完整的身份验证过程,这可能非常容易出错。你们有办法轻松解决这个问题吗

如果调用不需要作为登录用户进行身份验证的当前put配置文件,lambda函数将不会收到有关被调用方的任何信息

event.requestContext.identity

看起来像这样

            "cognitoIdentityPoolId": null,
            "accountId": null,
            "cognitoIdentityId": null,
            "caller": null,
            "sourceIp": "93.104.81.250",
            "principalOrgId": null,
            "accessKey": null,
            "cognitoAuthenticationType": null,
            "cognitoAuthenticationProvider": null,
            "userArn": null,
            "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0",
            "user": null
        }
在serverless.yml中添加授权将填充该信息,但未经授权的用户不能调用我

授权人:aws_iam


您肯定要添加另一个lamba,如您所述。否则,您也可以自己处理身份验证,手动检查头中的授权令牌并根据cognito对其进行身份验证,但我建议不要这样做。 你想做两件不同的事情。你应该写两个不同的lambda