使用 AWS Amplify 创建 React 应用程序,并使用 Amazon Cognito 添加身份验证 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 AWS Amplify 创建 React 应用程序,并使用 Amazon Cognito 添加身份验证

由 Rishi Singla (AWS) 创建

摘要

此模式演示了如何使用 AWS Amplify 创建基于 React 的应用程序,以及如何使用 Amazon Cognito 为前端添加身份验证。AWS Amplify 由一组工具(开源框架、可视化开发环境、控制台)和服务(网络应用程序和静态网站托管)组成,用于加速 AWS 上移动和网络应用程序的开发。

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account

  • 计算机上已安装 Node.jsnpm

产品版本

  • Node.js 版本 10.x 或更高版本(要验证您的版本,请在终端窗口中运行 node -v

  • npm 6.x 或更高版本(要验证您的版本,请在终端窗口中运行 npm -v

架构

目标技术堆栈

  • AWS Amplify

  • Amazon Cognito

工具

操作说明

Task描述所需技能

安装 Amplify CLI

Amplify CLI 是一个统一的工具链,用于为您的 React 应用程序创建 Amazon Web Services Cloud 服务。若要安装 Amplify CLI,请运行:

npm install -g @aws-amplify/cli

如果有新的主要版本可用,npm 将通知您。如果是这样,请使用以下命令升级您的 npm 版本:

npm install -g npm@9.8.0

其中 9.8.0 指的是您要安装的版本。

应用程序开发人员
Task描述所需技能

创建 React 应用程序。

若要创建新的 React 应用程序,请使用命令:

npx create-react-app amplify-react-application

其中 ampify-react-application 是应用程序的名称。

应用程序创建成功后,您将看到提示信息:

Success! Created amplify-react-application

将为 React 应用程序创建一个包含多个子文件夹的目录。

应用程序开发人员

在本地计算机上启动应用程序。

转到上一步中创建的目录 amplify-react-application 并运行以下命令:

amplify-react-application% npm start

这将在您的本地计算机上启动 React 应用程序。

应用程序开发人员
Task描述所需技能

配置 Amplify 以连接到您的 Amazon Web Services account。

通过运行以下命令配置 Amplify:

amplify-react-application % amplify configure

Amplify CLI 要求您按照以下步骤设置对您的 Amazon Web Services account 的访问权限:

  1. 登录您的 AWS 管理员账户。

  2. 指定您要使用的 AWS 区域。

  3. 创建具有编程访问权限的 AWS Identity and Access Management(AWS IAM)用户,并将 AdministratorAccess-Amplify 权限策略附加给该用户。

  4. 复制访问密钥 ID 和秘密访问密钥。

  5. 在终端中输入这些详细信息。

  6. 创建配置文件名称或使用默认配置文件。

警告

这种情况需要具有编程访问权限和长期证书的 IAM 用户,这会带来安全风险。为帮助减轻这种风险,我们建议仅向这些用户提供执行任务所需的权限,并在不再需要这些用户时将其移除。必要时可以更新访问密钥。有关更多信息,请参阅《IAM 用户指南》中的 更新访问密钥

这些步骤在终端中显示如下。

Follow these steps to set up access to your AWS account: Sign in to your AWS administrator account: https://console.aws.amazon.com/ Press Enter to continue Specify the AWS Region ? region: us-east-1 Follow the instructions at https://docs.amplify.aws/cli/start/install/#configure-the-amplify-cli to complete the user creation in the AWS console https://console.aws.amazon.com/iamv2/home#/users/create Press Enter to continue Enter the access key of the newly created user: ? accessKeyId: ******************** ? secretAccessKey: **************************************** This would update/create the AWS Profile in your local machine ? Profile Name: new Successfully set up the new user.

有关这些步骤的更多信息,请参阅 Amplify 开发人员中心中的文档

常规 AWS,应用程序开发人员
Task描述所需技能

初始化 Amplify。

  1. 要在新目录中初始化 Amplify,请运行:

    amplify init

    Amplify 会提示您输入项目名称和配置参数

  2. 指定所有参数,然后按 Y 以使用指定的配置初始化项目。

    Project information | Name: amplifyreactproject | Environment: dev | Default editor: Visual Studio Code | App type: javascript | Javascript framework: react | Source Directory Path: src | Distribution Directory Path: build | Build Command: npm run-script build | Start Command: npm run-script start
  3. 选择在上一步中创建的配置文件。这些资源将部署到您创建的 Amplify 项目中的 dev 环境中。

  4. 要确认资源已创建,您可以打开 AWS Amplify 控制台并查看用于创建资源的 AWS CloudFormation 模板和详细信息。

    Deploying root stack amplifyreactproject [ ====================-------------------- ] 2/4 amplify-amplifyreactproject-d… AWS::CloudFormation::Stack CREATE_IN_PROGRESS UnauthRole AWS::IAM::Role CREATE_COMPLETE DeploymentBucket AWS::S3::Bucket CREATE_IN_PROGRESS AuthRole AWS::IAM::Role CREATE_COMPLETE
应用程序开发人员,常规 AWS
Task描述所需技能

添加身份验证

您可以使用 amplify add <category> 命令添加诸如用户登录或后端 API 之类的功能。在此步骤中,您将使用该命令添加身份验证。

Amplify 提供包含 Amazon Cognito、前端库和嵌入式身份验证器 UI 组件的后端身份验证服务。功能包括用户注册、用户登录、多重身份验证、用户注销和无密码登录。您还可以通过与 Amazon、Google 和 Facebook 等联合身份提供商集成来对用户进行身份验证。Amplify 身份验证类别与其他 Amplify 类别(如 API、分析和存储)无缝集成,因此您可以为经过身份验证和未经身份验证的用户定义授权规则。

  1. 若要为 React 应用配置身份验证,请运行以下命令:

    amplify-react-application1 % amplify add auth

    这将显示以下信息和提示。您可以根据您的业务和安全需求选择适当的配置。

    Using service: Cognito, provided by: awscloudformation The current configured provider is Amazon Cognito. Do you want to use the default authentication and security configuration? (Use arrow keys) ❯ Default configuration Default configuration with Social Provider (Federation) Manual configuration I want to learn more.
  2. 举一个简单的例子,选择默认配置,然后选择用户的登录机制(在本例中为电子邮件):

    How do you want users to be able to sign in? Username ❯ Email Phone Number Email or Phone Number I want to learn more.
  3. 绕过高级设置完成身份验证资源的添加:  

    Do you want to configure advanced settings? (Use arrow keys) ❯ No, I am done. Yes, I want to make some additional changes.
  4. 构建您的本地后端资源,并在云中进行配置:

    amplify-react-application1 % amplify push

    此命令会对您账户中的 Congito 用户池进行适当更改。

  5. Y 使用配置auth资源 CloudFormation。

    这将配置以下资源:

    UserPool AWS::Cognito::UserPool CREATE_COMPLETE UserPoolClientWeb AWS::Cognito::UserPoolClient CREATE_COMPLETE UserPoolClientWeb AWS::Cognito::UserPoolClient CREATE_COMPLETE UserPoolClientRole AWS::IAM::Role CREATE_COMPLETE UserPoolClientLambda AWS::Lambda::Function CREATE_COMPLETE UserPoolClientLambdaPolicy AWS::IAM::Policy CREATE_COMPLETE UserPoolClientLogPolicy AWS::IAM::Policy CREATE_IN_PROGRESS

    您还可以使用 AWS Cognito 控制台查看这些资源(查找 Cognito 用户池和身份池)。

    此步骤使用 Cognito 用户池和身份池配置更新 React 应用程序的 src 文件夹中的 aws-exports.js 文件。

应用程序开发人员,常规 AWS
Task描述所需技能

更改 App.js 文件。

src 文件夹中,打开并修订 App.js 文件。修改后的文件应如下所示:

{ App.Js File after modifications: import React from 'react'; import logo from './logo.svg'; import './App.css'; import { Amplify } from 'aws-amplify'; import { withAuthenticator, Button, Heading } from '@aws-amplify/ui-react'; import awsconfig from './aws-exports'; Amplify.configure(awsconfig); function App({ signOut }) { return ( <div> <h1>Thankyou for doing verification</h1> <h2>My Content</h2> <button onClick={signOut}>Sign out</button> </div> ); } export default withAuthenticator(App);
应用程序开发人员

导入 React 程序包。

App.js 文件导入了两个 React 程序包。使用命令安装这些程序包:

amplify-react-application1 % npm install --save aws-amplify @aws-amplify/ui-react
应用程序开发人员
Task描述所需技能

启动应用程序。

在本地计算机上启动 React 应用程序:

amplify-react-application1 % npm start
应用程序开发人员,常规 AWS

检查身份验证。

检查应用程序是否提示输入身份验证参数。(在我们的示例中,我们已将电子邮件配置为登录方式。)

前端用户界面应提示您输入登录凭证,并提供用于创建账户的选项。

您还可以配置 Amplify 构建流程,将后端添加为持续部署工作流的一部分。然而,此模式不涵盖该选项。

应用程序开发人员,常规 AWS

相关资源