将手动创建的 Cognito 用户池与放大项目一起使用

Posted

技术标签:

【中文标题】将手动创建的 Cognito 用户池与放大项目一起使用【英文标题】:Using manually created Cognito User Pool with an amplify project 【发布时间】:2020-08-21 16:44:00 【问题描述】:

在将 AWS Amplify 添加到 React 项目时,我正在尝试使用我现有的 Cognito 用户池。

因此,我想为我手动创建的 Cognito 用户池中的现有用户使用 Amplify Datastore 功能。另外,我喜欢用于管理 API 的 GraphQL 模式的 Amplify CLI 功能,因此,这意味着我需要在我的 react 项目中初始化 amplify 项目。

我从这一章开始https://docs.amplify.aws/lib/datastore/getting-started/q/platform/js。但本章使用 API Key 认证。

我知道,我可以通过amplify auth add 向放大项目添加身份验证,但它没有使用现有用户池的选项。

我可以使用我的用户池,而无需通过 amplify init 初始化放大项目 - 使用手动组合的 aws-exports.json。但正如我所指出的,我还需要为 API 添加放大项目。

我会结合配置,比如Amplify.configure(...aws_config_by_amplify, ...my_aws_config),但目前还不清楚如何使用我的用户池管理放大 api 身份验证。

理想情况下,使用一些命令来放大现有用户池的项目配置会很棒,但我还没有找到。

另外,我认为可以在放大项目的 cloudformation 模板/参数中进行一些手动更改,并使用它来更新堆栈,但不幸的是,我不太擅长 CloudFormation。

如何解决?

【问题讨论】:

【参考方案1】:

解决方案在这里找到:https://github.com/aws-amplify/amplify-cli/issues/779

    初始化放大项目amplify init 通过选择 GraphQL 添加 API amplify add api 更新ampilfy/backend/api/backend-config.json,将defaultAuthentication改为
          "defaultAuthentication": 
            "authenticationType": "AMAZON_COGNITO_USER_POOLS"
          
    更新ampilfy/backend/api/amplifyDatasource/parameters.json:

    "AppSyncApiName": "amplifyDatasource",
    "DynamoDBBillingMode": "PAY_PER_REQUEST",
    "DynamoDBEnableServerSideEncryption": "false",
    "authRoleName": 
        "Ref": "AuthRoleName"
    ,
    "unauthRoleName": 
        "Ref": "UnauthRoleName"
    ,
    "AuthCognitoUserPoolId": "<USERPOOL ID>"

(我不确定是否需要 authRoleNameunauthRoleName

    amplify push,瞧,Appsync 将用户池作为默认身份验证。

【讨论】:

以上是关于将手动创建的 Cognito 用户池与放大项目一起使用的主要内容,如果未能解决你的问题,请参考以下文章