在AWS API Gateway中,当使用WebSocket API时,API Gateway会自动将Cognito用户池(User Pool)信息包含在请求中。但是,有时在WebSocket路由中,可能会出现Cognito信息缺失的情况。以下是一个解决方法的代码示例:
Resources:
MyWebSocketAPI:
Type: AWS::ApiGatewayV2::Api
Properties:
Name: MyWebSocketAPI
ProtocolType: WEBSOCKET
RouteSelectionExpression: $request.body.action
DisableExecuteApiEndpoint: true
AuthorizerSelectionExpression: $request.header.Authorization
...其他配置...
import json
def lambda_handler(event, context):
# 检查是否存在Cognito信息
if 'requestContext' in event and 'authorizer' in event['requestContext']:
# 获取Cognito信息
cognito_info = event['requestContext']['authorizer']
# 将Cognito信息添加到请求中
request_info = {
'cognitoInfo': cognito_info,
'payload': event['body']
}
# 将请求信息传递给其他处理逻辑
# ...
return {
'statusCode': 200,
'body': json.dumps('Success')
}
else:
return {
'statusCode': 401,
'body': json.dumps('Unauthorized')
}
在上述示例中,我们首先检查请求中是否存在Cognito信息,如果存在,则将其添加到新的请求信息中,然后将新的请求信息传递给其他处理逻辑。如果Cognito信息缺失,则返回未授权的错误响应。
这样,WebSocket路由中就可以获取到Cognito用户池的信息,并在后续的处理中使用它们。