

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Autenticação de usuários de aplicações existentes do React ao usar o Amazon Cognito e o AWS Amplify UI
<a name="authenticate-react-app-users-cognito-amplify-ui"></a>

*Daniel Kozhemyako, Amazon Web Services*

## Resumo
<a name="authenticate-react-app-users-cognito-amplify-ui-summary"></a>

Este padrão demonstra como adicionar funcionalidades de autenticação a uma aplicação frontend existente do React ao usar a biblioteca do AWS Amplify UI e um grupo de usuários do Amazon Cognito.

O padrão usa o Amazon Cognito para fornecer autenticação, autorização e gerenciamento de usuários para a aplicação. Ele também usa um componente do [Amplify UI](https://ui.docs.amplify.aws/react/getting-started/introduction), uma biblioteca de código aberto que estende os recursos do desenvolvimento da interface do AWS Amplify usuário (UI). O componente [Authenticator UI](https://ui.docs.amplify.aws/react/connected-components/authenticator/advanced) gerencia as sessões de login e executa o fluxo conectado à nuvem, que autentica usuários por meio do Amazon Cognito.

Depois de implementar esse padrão, os usuários podem entrar usando qualquer uma das seguintes credenciais:
+ Nome de usuário e senha
+ Provedores de identidades sociais, como o Apple, Facebook, o Google e o Amazon
+ Provedores de identidade corporativa compatíveis com SAML 2.0 ou OpenID Connect (OIDC)

**nota**  
Para criar um componente personalizado da interface do usuário de autenticação, é possível executá-lo no Authenticator UI com o modo sem periféricos.

## Pré-requisitos e limitações
<a name="authenticate-react-app-users-cognito-amplify-ui-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS
+ Uma aplicação da web do React, versão 18.2.0 ou versões posteriores
+ Node.js e npm, versões 6.14.4 ou versões posteriores, [instalados](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)

**Limitações**
+ Esse padrão se aplica somente aos aplicativos web React.
+ Esse padrão usa um componente Amplify UI pré-construído. A solução não abrange as etapas necessárias para implementar um componente de UI personalizado.

**Versões do produto**
+ Amplify UI 6.1.3 ou versões posteriores (Gen 1)
+ Amplify 6.0.16 ou versões posteriores (Gen 1)

## Arquitetura
<a name="authenticate-react-app-users-cognito-amplify-ui-architecture"></a>

**Arquitetura de destino**

O diagrama apresentado a seguir ilustra uma arquitetura que usa o Amazon Cognito para autenticar usuários em uma aplicação da web do React.

![\[O Amazon Cognito autentica usuários em uma aplicação da web do React.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/b2cea053-6931-4404-8aa8-c623ce2024ac/images/b7f69f20-a39d-4a78-8605-7dab73c59052.png)


## Ferramentas
<a name="authenticate-react-app-users-cognito-amplify-ui-tools"></a>

**Serviços da AWS**
+ O [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) fornece autenticação, autorização e gerenciamento de usuários para suas aplicações Web e móveis.

**Outras ferramentas**
+ O [Amplify UI](https://ui.docs.amplify.aws/react/getting-started/introduction) é uma biblioteca de interface do usuário de código aberto que oferece componentes personalizáveis que podem ser conectados à nuvem.
+ [O Node.js](https://nodejs.org/en/docs/) é um ambiente de tempo de JavaScript execução orientado a eventos projetado para criar aplicativos de rede escaláveis.
+ O [npm](https://docs.npmjs.com/about-npm) é um registro de software executado em um ambiente Node.js e usado para compartilhar ou emprestar pacotes e gerenciar a implantação de pacotes privados.

## Práticas recomendadas
<a name="authenticate-react-app-users-cognito-amplify-ui-best-practices"></a>

Se você estiver criando uma nova aplicação, recomendamos o uso do Amplify Gen 2.

## Épicos
<a name="authenticate-react-app-users-cognito-amplify-ui-epics"></a>

### Criar um grupo de usuários do Amazon Cognito
<a name="create-an-cog-user-pool"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um grupo de usuários. | [Criar um grupo de usuários do Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/tutorial-create-user-pool.html). Configure as opções de login e os parâmetros de segurança do grupo de usuários de acordo com os requisitos do seu caso de uso. | Desenvolvedor de aplicativos | 
| Adicionar um cliente de aplicativo. | [Configure um cliente do aplicativo do grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html). Este cliente é necessário para que sua aplicação interaja com o grupo de usuários do Amazon Cognito. | Desenvolvedor de aplicativos | 

### Integração do grupo de usuários do Amazon Cognito com o componente Authenticator UI
<a name="integrate-your-cog-user-pool-with-the-authenticator-ui-component"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Instale as dependências. | Para instalar os pacotes `aws-amplify` e `@aws-amplify/ui-react`, execute o seguinte comando no diretório raiz do seu aplicativo:<pre>npm i @aws-amplify/ui-react aws-amplify</pre> | Desenvolvedor de aplicativos | 
| Configure o grupo de usuários. | Com base no exemplo a seguir, crie um arquivo `aws-exports.js` e salve-o na pasta `src`. O arquivo deve incluir as seguintes informações:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/authenticate-react-app-users-cognito-amplify-ui.html)<pre>// replace the user pool region, id, and app client id details<br />const awsmobile = {<br />    "aws_project_region": "put_your_region_here",<br />    "aws_cognito_region": "put_your_region_here",<br />    "aws_user_pools_id": "put_your_user_pool_id_here",<br />    "aws_user_pools_web_client_id": "put_your_user_pool_app_id_here"<br />}<br /><br />export default awsmobile;</pre> | Desenvolvedor de aplicativos | 
| Importe e configure o serviço Amplify. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/authenticate-react-app-users-cognito-amplify-ui.html) | Desenvolvedor de aplicativos | 
| Adicione o componente Authenticator UI. | Para exibir o componente `Authenticator` UI, adicione as seguintes linhas de código ao arquivo do ponto de entrada do aplicativo (`App.js`):<pre>import { Authenticator } from '@aws-amplify/ui-react';<br />import '@aws-amplify/ui-react/styles.css';</pre>O trecho de código de exemplo importa o componente `Authenticator` UI e o arquivo “styles.css” do Amplify UI, que é necessário ao usar os temas desenvolvidos previamente do componente.O componente `Authenticator` UI fornece dois valores de retorno:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/authenticate-react-app-users-cognito-amplify-ui.html)Veja o componente do exemplo a seguir:<pre>function App() {<br />    return (<br />        <Authenticator><br />            {({ signOut, user }) => (<br />                <div><br />                    <p>Welcome {user.username}</p><br />                    <button onClick={signOut}>Sign out</button><br />                </div><br />            )}<br />        </Authenticator><br />    );<br />}</pre>Para obter um arquivo `App.js` de exemplo, consulte a seção [Informações adicionais](#authenticate-react-app-users-cognito-amplify-ui-additional) deste padrão. | Desenvolvedor de aplicativos | 
| (Opcional) Recupere as informações da sessão. | Depois que um usuário é autenticado, você pode recuperar dados do cliente Amplify sobre sua sessão. Por exemplo, você pode recuperar o token web JSON (JWT) da sessão de um usuário para autenticar as solicitações da sessão em uma API de backend.Veja o exemplo a seguir de um cabeçalho de solicitação que inclui um JWT:<pre>import { fetchAuthSession } from 'aws-amplify/auth';<br />(await fetchAuthSession()).tokens?.idToken?.toString();</pre> | Desenvolvedor de aplicativos | 

## Solução de problemas
<a name="authenticate-react-app-users-cognito-amplify-ui-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Novos usuários não podem se cadastrar no aplicativo. | Conforme indicado a seguir, certifique-se de que o grupo de usuários do Amazon Cognito esteja configurado para permitir que os usuários se registrem no próprio grupo de usuários:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/authenticate-react-app-users-cognito-amplify-ui.html) | 
| O componente Auth parou de funcionar após a atualização da versão 5 para a 6. | Na versão 6 do Amplify, a categoria `Auth` passou a utilizar uma abordagem funcional e parâmetros nomeados. Agora você deve importar o funcional APIs diretamente do `aws-amplify/auth` caminho. Para obter mais informações, consulte [Migrate from v5 to v6](https://docs.amplify.aws/gen1/react/build-a-backend/auth/auth-migration-guide/) na documentação do Amplify. | 

## Recursos relacionados
<a name="authenticate-react-app-users-cognito-amplify-ui-resources"></a>
+ [Introdução ao Amazon Cognito (site](https://aws.amazon.com/cognito/getting-started/))AWS 
+ [Crie um novo aplicativo React](https://reactjs.org/docs/create-a-new-react-app.html) (documentação do React)
+ [O que é o Amazon Cognito?](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) (documentação do Amazon Cognito)
+ [Amplify UI library](https://ui.docs.amplify.aws/) (documentação do Amplify)

## Mais informações
<a name="authenticate-react-app-users-cognito-amplify-ui-additional"></a>

O arquivo `App.js` deve conter o seguinte código:

```
import './App.css';
import { Amplify } from 'aws-amplify';
import awsExports from './aws-exports';
import { fetchAuthSession } from 'aws-amplify/auth';
import { Authenticator } from '@aws-amplify/ui-react';
import '@aws-amplify/ui-react/styles.css';
Amplify.configure({ ...awsExports });
let token = (await fetchAuthSession()).tokens?.idToken?.toString();
function App() {
  return (
      <Authenticator>
        {({ signOut, user }) => (
            <div>
              <p>Welcome {user.username}</p>
                <p>Your token is: {token}</p>
              <button onClick={signOut}>Sign out</button>
            </div>
        )}
      </Authenticator>
  );
}

export default App;
```