标签: aws-amplify

如何使用 aws-amplify 处理 api 错误?

我目前正在尝试使用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

10
推荐指数
1
解决办法
7101
查看次数

Auth.currentAuthenticatedUser() 和 Auth.currentSession() 有什么区别?

在每次调用后端之前,我过去常常Auth.currentAuthenticatedUser()获取idToken.jwtToken它并将其在我的请求标头中传递给后端服务器以获取数据。

在我的用例中使用Auth.currentSession()而不是使用有区别Auth.currentAuthenticatedUser()吗?Auth.currentAuthenticatedUser()令牌过期后是否刷新令牌,类似于Auth.currentSession()?

amazon-cognito aws-amplify

10
推荐指数
1
解决办法
661
查看次数

从 AWS Amplify 部署的 HTTPS (SSL) 客户端向 HTTP 端点发出 API 请求

我已经在 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

10
推荐指数
2
解决办法
2797
查看次数

通过 Amplify 集成构建 AWS Amplify React 应用程序时始终缺少 aws-exports.js

我的 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)

amazon-web-services aws-amplify aws-amplify-cli

10
推荐指数
3
解决办法
2万
查看次数

aws-amplify-react 和@aws-amplify/ui-react 有什么区别?

我看到很多文档和地方说要使用,aws-amplify-react但在文档中开始使用 react 我看到这个包@aws-amplify/ui-react使用模块withAuthenticationaws-amplify-react也有)

它们之间有什么区别?我应该什么时候用aws-amplify-react,什么时候用@aws-amplify/ui-react

javascript amplifyjs reactjs aws-amplify

10
推荐指数
1
解决办法
1069
查看次数

AWS Cognito 和 Amplify:刷新会话时不发送 clientMetadata

我们有一个使用 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)。

我们需要什么帮助:

  1. 我们做得还不够吗?我们是否必须在我们的代码中做一些其他的事情来确保 clientMetadata 对象在每个对 Cognito 的请求上发送,即使是我们的代码没有明确完成的请求?
  2. 我们做错了吗?目标是确保我们可以将我们自己的数据发送到 …

javascript reactjs amazon-cognito aws-amplify

10
推荐指数
1
解决办法
1306
查看次数

在 Lambda 函数中获取 Cognito 用户属性

我正在使用 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

10
推荐指数
1
解决办法
6062
查看次数

AWS Cognito 错误:没有为未经身份验证的访问提供 Cognito 身份池

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)

amazon-web-services amazon-cognito aws-amplify

10
推荐指数
0
解决办法
9323
查看次数

未能满足约束:成员必须满足正则表达式模式:[\w+=,.@-]+

我正在尝试为 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

10
推荐指数
1
解决办法
4万
查看次数

RequestHeaderSectionTooLarge:您的请求标头部分超出了允许的最大大小

我们正在将 AWS Amplify 用于 NextJS Web 应用程序,并且当我尝试加载部署到 Amplify 的应用程序时,不断收到错误。本地没有问题。

在此输入图像描述

我正在使用 Amplify 的默认身份验证配置,以及基本的电子邮件和密码身份验证。看起来它可能与标头中设置的 Amplify cookie 有关,但我在 AWS 中找不到任何文档来防止这种情况或减少标头传递的信息量。任何帮助,将不胜感激。

amazon-cognito next.js aws-amplify

10
推荐指数
1
解决办法
2万
查看次数