【发布时间】:2020-07-27 02:22:13
【问题描述】:
我正在使用 Amplify,并让我的 API 网关代理到 Lambda。我在 /{proxy+} 上启用了 CORS 并部署了 API。在我的 Lambda 函数中,我在我的普通函数中设置了适当的标头:
import json
def handler(event, context):
print("received event:")
print(event)
return {
"statusCode": 200,
"headers": {
"Access-Control-Allow-Credentials": True,
"Access-Control-Allow-Headers": "Content-Type",
"Access-Control-Allow-Methods": "OPTIONS,POST,GET",
"Access-Control-Allow-Origin": "*",
},
"body": json.dumps(event),
}
此 Lambda 函数位于通过 Cognito 进行身份验证的 API Gateway 资源后面。
当我使用 Amplify 调用我的 API 时:
let myInit = {
headers: {
Authorization: `Bearer ${(await Auth.currentSession())
.getIdToken()
.getJwtToken()}`
}
};
API.get("adminapi", "/admin", myInit) ...
我的GET 请求中缺少可怕的 CORS 标头“Access-Control-Allow-Origin”:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/admin. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
我看到它在OPTIONS 请求中返回:
我什至在 Postman 中进行了测试以验证标头是否会返回:
我在这里做错了什么?调用似乎没有通过 API 网关。我想知道它是否与身份验证有关。当我使用我的 IAM 凭证从 Postman 进行测试时,它可以正常工作,但是从我的 Web 应用程序使用不记名令牌时,它会像上面一样失败。
【问题讨论】:
-
总是引用 full 错误消息。我怀疑它说预检响应中缺少标头,而不是请求的资源。
-
GET 请求中缺少标头。 OPTIONS 请求运行良好。
-
更新了问题以包含更多详细信息。
-
你找到解决方案了吗?
标签: cors aws-amplify amplifyjs aws-amplify-vue