将手动创建的 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 用户池与放大项目一起使用的主要内容,如果未能解决你的问题,请参考以下文章

使用 AWS Cognito 和 Django 创建用户

如何在现有的 Cognito 用户池中获取生日? (放大 iOS)

如何通过 Cognito 用户 ID 限制访问 AWS API Gateway 端点

使用 Amplify 将现有 AWS Cognito 用户池集成到 iOS 项目中

具有授权的 AWS Cognito 用户(如何从应用程序将用户添加到用户组?)

将连接池与 Jedis 一起使用