问题描述
使用放大我设置了一个快速的无服务器lambda。我添加了似乎在互联网上出现的标题。直到最近我才添加星星,因为我对此感到非常沮丧。
我的lambda标头
app.use(function(req,res,next) {
res.header("Access-Control-Allow-Origin","*")
res.header("Access-Control-Allow-Credentials",true),res.header("Access-Control-Allow-Methods","*")
res.header("Access-Control-Allow-Headers","*")
next()
});
我通过放大创建其余网关,还添加了一个路径并选择“仅经过身份验证的用户”,然后推送网关。我不知道它是否必要,但我也转到网关内部的路由,然后单击“启用Cors”和“部署网关”。添加新路线后,我每次都会执行此操作。我已为网关打开日志记录,它似乎正在使用正确的标头进行响应,但在lambda端,它从未使用放大托管堆栈从云中通过网关触发。
(878907ef-3f7c-4970-a336-227af689ada0) Method response headers: {Access-Control-Allow-Headers=Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,Access-Control-Allow-Methods=DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT,Access-Control-Allow-Origin=*,Content-Type=application/json}
如果我配置main.ts
文件(如下所示),则在我的角度应用程序(http:// localhost:4200)上本地出现Cors问题。但是,如果我运行测试方法,则可以从网关获得正确的响应。 (我知道其他错误会显示为Cors问题,但实际情况并非如此)
import API from '@aws-amplify/api';
import Auth from '@aws-amplify/auth';
API.configure(awsconfig);
Auth.configure(awsconfig);
如果我使用(如下所示)在本地(http:// localhost:4200)上配置角度main.ts
文件,则会导致来自lambda的成功响应。根本没有任何Cors错误。
import { Amplify } from 'aws-amplify';
Amplify.configure(awsconfig);
但是,当我尝试将放大应用程序推送到放大托管云堆栈时,问题再次出现。如果我使用以下配置,则控制台中的应用程序会告诉我
"TypeError: Cannot read property 'aws_appsync_region' of null"
,并且永远不会引导。
TypeError: Cannot read property 'aws_appsync_region' of null
at t._graphqlSubscribe (main-es2015.9d63c1e97711d41894ae.js:1)
at t.graphql (main-es2015.9d63c1e97711d41894ae.js:1)
at t.graphql (main-es2015.9d63c1e97711d41894ae.js:1)
at new t (main-es2015.9d63c1e97711d41894ae.js:1)
at Object.t.ɵfac [as factory] (main-es2015.9d63c1e97711d41894ae.js:1)
at ks.hydrate (main-es2015.9d63c1e97711d41894ae.js:1)
at ks.get (main-es2015.9d63c1e97711d41894ae.js:1)
at tt (main-es2015.9d63c1e97711d41894ae.js:1)
at Object.et (main-es2015.9d63c1e97711d41894ae.js:1)
at Object.t.ɵfac [as factory] (main-es2015.9d63c1e97711d41894ae.js:1)
import { Amplify } from 'aws-amplify';
Amplify.configure(awsconfig);
但是,如果我重新添加配置,它将使用'aws_appsync_region'
删除上述错误消息,但是会直接导致lasda出现Cors问题。
import API from '@aws-amplify/api';
import Auth from '@aws-amplify/auth';
import { Amplify } from 'aws-amplify';
Amplify.configure(awsconfig);
API.configure(awsconfig);
Auth.configure(awsconfig);
在控制台中显示。
Access to XMLHttpRequest at 'https://XXXXXXXXXX.execute-api.us-east-1.amazonaws.com/sandBox/blind/get'
from origin 'https://sandBox.whatever.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is
present on the requested resource.
main-es2015.dc59a351503c7e4f109f.js:1 ERROR Error: Network Error
at LYNF.t.exports (main-es2015.dc59a351503c7e4f109f.js:1)
at XMLHttpRequest.d.onerror [as __zone_symbol__ON_PROPERTYerror] (main-es2015.dc59a351503c7e4f109f.js:1)
at XMLHttpRequest.T (polyfills-es2015.026fcb2559269e9f129a.js:1)
at l.invokeTask (polyfills-es2015.026fcb2559269e9f129a.js:1)
VM279:1 POST https://XXXXXXXXXX.execute-api.us-east-1.amazonaws.com/sandBox/blind/get net::ERR_Failed
我想要的是消除这些愚蠢的Cors错误,并能够将我的应用程序推送到其所属堆栈下的云中。我删除了所有其他堆栈,因为它们都不起作用。在这些错误上争相放大,api网关和lambda似乎是荒谬的。任何人请向我解释问题出在哪里以及如何解决。我觉得我已经阅读了所有相关和不相关的文章,并且半途而废,只是发现我无法部署该应用程序。
解决方法
对于遇到相同问题的其他人。有时,这不是真正的CORS问题(我知道),但不知道如何调试它。每个AWS在放大身份验证版本3.4.4
中存在一个已知错误。
建议的第一步是更改放大配置服务的方式。仅此一项并不能解决问题,我还没有进行其他测试。
import API from '@aws-amplify/api';
import Auth from '@aws-amplify/auth';
import { Amplify } from 'aws-amplify';
import awsconfig from './aws-exports';
Amplify.configure(awsconfig);
Amplify.register(Auth);
Amplify.register(API);
下一步(针对角度)将环境配置buildOptimizer
更改为false
。
"buildOptimizer": false,
完成这些步骤后,我能够将代码推送到云中并按预期方式登录。与我的本地系统相同。如果上述步骤不起作用,另一个推荐的步骤是将Amplify Auth降级为3.3.2
。
"@aws-amplify/auth": "3.3.2"