我目前正在尝试使用aws-amplifyreact lib将数据发布到由 aws api-gateway 触发的 aws lambda 函数。
这是代码:
API.post("snippets","snippets/", {
body: data,
}).then(response => response).catch(console.log(err))
Run Code Online (Sandbox Code Playgroud)
在主要情况下,一切正常。
但是我的 lambda 函数旨在验证输入数据并返回一个状态代码400,返回的有效负载如下所示:
{
"errors": [
{
"field": "title",
"message": "This field is required"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想捕获这些错误以便在前端显示它们,但aws-amplify似乎有一个未记录的行为。
默认情况下,400返回的状态代码会抛出一条默认错误消息:
Error: Request failed with status code 400
at createError (createError.js:16)
at settle (settle.js:18)
at XMLHttpRequest.handleLoad (xhr.js:77)
Run Code Online (Sandbox Code Playgroud)
有没有办法获得返回的有效载荷而不是这个神奇的错误?
amazon-web-services reactjs amazon-cognito aws-lambda aws-amplify
在每次调用后端之前,我过去常常Auth.currentAuthenticatedUser()获取idToken.jwtToken它并将其在我的请求标头中传递给后端服务器以获取数据。
在我的用例中使用Auth.currentSession()而不是使用有区别Auth.currentAuthenticatedUser()吗?Auth.currentAuthenticatedUser()令牌过期后是否刷新令牌,类似于Auth.currentSession()?
我已经在 AWS EC2 实例中部署了我的后端/API 服务器,该实例是在没有 SSL 的情况下加载的,并且 url 类似于“ http://ec2-67-ap-southeast-3.compute.amazonaws.com ”
我已经使用AWS AMPLIFY控制台部署了我的 React 前端/客户端。它会自动将SSL添加到生产分支 URL,URL 类似于https://branch.d3as6d542.amplifyapp.com
现在的问题是,我无法从客户端向我的服务器发出任何 API/HTTP 请求。并出现以下错误,
Mixed Content: The page at 'https://branch.d3as6d542.amplifyapp.com' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://ec2-67.ap-southeast-3.compute.amazonaws.com/api/profile’. This request has been blocked; the content must be served over HTTPS.
Run Code Online (Sandbox Code Playgroud)
我能够从我的客户端本地主机开发环境中进行这个 API 调用。但是由于 HTTP 未匹配,AWS AMPLIFY SERVER 出现错误。
我该如何解决这个问题,或者有什么方法可以删除自动添加的 AWS AMPLIFY 的 SSL?
ssl xmlhttprequest amazon-web-services mixed-content aws-amplify
我的 React 应用程序使用 GraphQL API、存储、身份验证、函数、托管 - 所有有趣的东西 - 所以我必须有一个aws-exports.js可用的文件。使用放大后端资源来放大 React 前端。
回购协议基本上设置为:
package.json
src/
- aws-exports.js
- app.js
- ...etc
Run Code Online (Sandbox Code Playgroud)
并在每个目录中执行一个ls操作,显示在构建中没有aws-exports.js生成文件。
通过许多不同的配置,我遇到了:
[INFO]: # Executing command: yarn run build
[INFO]: yarn run v1.16.0
[INFO]: $ react-scripts build
[INFO]: Creating an optimized production build...
[INFO]: Failed to compile.
[INFO]: ./src/App.js
Cannot find file './aws-exports' in './src'.
2020-04-30T00:52:34.883Z [WARNING]: error Command failed with exit code 1.
Run Code Online (Sandbox Code Playgroud)
当我签入amplify.yml并.yml在网络控制台中进行配置时就是如此。
我已经尝试过amplify push;,但正如预期的那样遇到了
An …Run Code Online (Sandbox Code Playgroud) 我看到很多文档和地方说要使用,aws-amplify-react但在文档中开始使用 react 我看到这个包@aws-amplify/ui-react使用模块withAuthentication(aws-amplify-react也有)
它们之间有什么区别?我应该什么时候用aws-amplify-react,什么时候用@aws-amplify/ui-react?
我们有一个使用 AWS Cognito 和 Amplify 的 React 客户端(“aws-amplify”:“1.1.40”)。
当用户登录时,我们希望向 Cognito 发送一些额外数据,以供“预令牌生成”触发器使用。我们通过向Auth.signIn 函数调用添加一个clientMetadata ({"metadataKey1": "metadataValue1"}) 对象来做到这一点:
Auth.signIn(auth.email, auth.password, {"metadataKey1": "metadataValue1"})
.then(response => {
// Sign in OK
})
.catch(error => {
// Something went wrong
});
Run Code Online (Sandbox Code Playgroud)
这按预期工作,Cognito“预令牌生成”lambda 可以"metadataKey1"从请求中的 clientMetadata 中提取。
这是我们的问题开始的地方:
成功登录后,AWS Amplify 会自动刷新会话。此会话刷新不是由我们的代码明确完成的,并且未设置在登录期间使用的 clientMetadata 对象。这当然意味着对 Cognito 的自动会话刷新请求不包含 clientMetadata,这反过来意味着 Cognito“预令牌生成”lambda 无法"metadataKey1"从请求中的 clientMetadata 中提取(因为它不存在)。
我们对代码进行了调试,发现对 Cognito 的自动请求发生在@aws-amplify\auth\node_modules\amazon-cognito-identity-js\es\CognitoUser.js#1249, CognitoUser.prototype.refreshSession。refreshSession 函数可以接收 clientMetadata 对象,但是在调试代码时,clientMetadata 对象始终是undefined(这是有道理的;我们没有明确设置它,而且 Amplify 代码似乎没有存储/使用我们在登录期间设置的 clientMetadata)。
我们需要什么帮助:
我正在使用 AWS Amplify 创建 Lambda 函数、REST API 和 Cognito 用户池。我想检索向端点发出请求的 Cognito 用户,以便我可以访问他们的用户属性。
我为该功能选择了无服务器 Express 模板:
应用程序.js
app.post('/do-something', async (req, res) => {
// The user pool ID is available as an environment variable.
// I want to get the user and use their user attributes here.
});
Run Code Online (Sandbox Code Playgroud)
客户端配置根据当前用户的令牌设置 Authorization 标头:
应用程序.js
Amplify.configure({
API: {
endpoints: [
{
name: "sampleCloudApi",
endpoint: "https://xyz.execute-api.us-east-1.amazonaws.com/Development",
custom_header: async () => {
return { Authorization: `Bearer ${(await Auth.currentSession()).getIdToken().getJwtToken()}` }
}
}
]
}
});
Run Code Online (Sandbox Code Playgroud)
事件 ( …
amazon-web-services amazon-cognito aws-lambda aws-api-gateway aws-amplify
var normalAuth = async (username, password) => {
try{
var user = await Auth.signIn(username, password)
console.log(user)
if(user.challengeName === "NEW_PASSWORD_REQUIRED"){
console.log("assigning new password!")
user = await Auth.completeNewPassword(user, "password") // give the user a new password. this would NOT be included in any kind of production code, its only here as a work around
console.log(user)
} // work around. users created in the console are only given temporary passwords, and as such have no authorization
// setting a new password will fix …Run Code Online (Sandbox Code Playgroud) 我正在尝试为 AWS 中的身份池应用策略。我正在使用 awc-cli 来设置策略,但它不断地从标题中给我这个例外:
调用 AttachPrincipalPolicy 操作时发生错误 (InvalidRequestException):检测到 1 个验证错误:“policyName”处的值“DeviceShadowPolicy”无法满足约束:成员必须满足正则表达式模式:[\w+=,.@-]+
这是我使用的命令:
aws iot attach-principal-policy --policy-name 'DeviceShadowPolicy' --principal 'PRINCIPAL'
Run Code Online (Sandbox Code Playgroud)
我不明白为什么会出现此错误。有人可以帮我吗?
amazon-web-services amazon-cognito aws-iot aws-amplify aws-policies
我们正在将 AWS Amplify 用于 NextJS Web 应用程序,并且当我尝试加载部署到 Amplify 的应用程序时,不断收到错误。本地没有问题。
我正在使用 Amplify 的默认身份验证配置,以及基本的电子邮件和密码身份验证。看起来它可能与标头中设置的 Amplify cookie 有关,但我在 AWS 中找不到任何文档来防止这种情况或减少标头传递的信息量。任何帮助,将不胜感激。
aws-amplify ×10
reactjs ×3
aws-lambda ×2
javascript ×2
amplifyjs ×1
aws-iot ×1
aws-policies ×1
next.js ×1
ssl ×1