Нужна аутентификация для вашего веб-приложения? В этом посте я расскажу вам, как настроить пул пользователей Amazon Cognito и использовать Amazon Cognito Hosted UI вместе с Amplify JavaScript для входа и выхода.

Часть 1. Создание пула пользователей Amazon Cognito

Выберите свой регион AWS, откройте Amazon Cognito и перейдите в раздел Пулы пользователей, затем нажмите Создать пул пользователей.

На шаге 1 выберем Электронная почта в качестве единственного варианта входа.

На шаге 2 я выберу вариант Без многофакторной идентификации для простоты, остальное оставлю по умолчанию.

Настройки по умолчанию на шаге 3 кажутся мне хорошими.

На шаге 4 я буду проще и выберу Отправить электронное письмо с помощью Cognito, оставив все остальное по умолчанию.

На шаге 5 давайте введем имя пула пользователей и отметим Использовать пользовательский интерфейс Cognito Hosted.

Прокрутите вниз, выберите Использовать домен Cognito и выберите префикс.

Давайте выберем имя клиента приложения, и я установлю разрешенный URL-адрес обратного вызова на URL-адрес моего сервера разработки (http://localhost:5173/, поскольку я использовать Vite). После входа пользователь будет перенаправлен на этот URL.

И последнее: разверните Дополнительные настройки клиента приложения, прокрутите вниз и нажмите Добавить URL-адрес для выхода. Я установлю это так же, как URL-адрес обратного вызова. Остальное можно оставить по умолчанию.

Проверьте свой выбор на шаге 6, затем нажмите Создать пул пользователей.

Теперь у вас есть совершенно новый пул пользователей!

Часть 2: Получите параметры для настройки Amplify

Нам нужно получить некоторые параметры для Настройки Amplify Cognito. Щелкните имя только что созданного пула пользователей и запишите ID пула пользователей и домен Cognito (без части https://).

Затем перейдите на вкладку Интеграция приложения и прокрутите вниз, чтобы найти клиент приложения.

Щелкните имя клиента приложения, чтобы открыть его. Запишите идентификатор клиента.

Круто, теперь мы должны быть готовы настроить Amplify. Просто убедитесь, что у вас есть все эти параметры (пример в скобках):

  • Когнито регион (eu-север-1)
  • Идентификатор пула пользователей (eu-north-1_4taDddVXH)
  • Идентификатор клиента (5fetar0pehrrdb451i5ucol4p5)
  • Домен Cognito (auth-demo.auth.eu-north-1.amazoncognito.com)
  • URL-адрес обратного вызова и выхода (http://localhost:5173/)

Часть 3: Веселье с интерфейсом

Давайте создадим новый проект Vite. Я буду упрощать и использовать ванильный JavaScript.

Без Amplify не весело, давайте установим его:

npm install aws-amplify

Хорошо, начнем с удаления каталога public/ и всех .js.htmlи .css. файлы. А, намного лучше. Хорошо, давайте создадим файл vite.config.js с этим содержимым (чтобы избежать ошибок сборки позже, просто используйте его):

// vite.config.js
export default {
  define: {
    global: {},
  },
  resolve: {
    alias: {
      './runtimeConfig': './runtimeConfig.browser',
    },
  },
};

Отлично, теперь давайте создадим файл index.html:

<!-- index.html -->
<!DOCTYPE html>
<html>
  <head>
    <script defer type="module" src="auth.js"></script>
  </head>
  <body>
    <button id="auth"></button>
  </body>
</html>

Вау, это действительно минимум! Что еще… Ах да, нам нужен JavaScript. Продолжайте и создайте auth.js. Сначала мы настроим Amplify с параметрами из Части 2:

// auth.js
import { Amplify, Auth } from 'aws-amplify';

Amplify.configure({
  Auth: {
    region: 'eu-north-1', // Cognito region
    userPoolId: 'eu-north-1_4taDddVXH', // User pool ID
    userPoolWebClientId: '5fetar0pehrrdb451i5ucol4p5', // Client ID (app client)
  },
  oauth: {
    domain: 'auth-demo.auth.eu-north-1.amazoncognito.com', // Cognito domain (without "https://")
    redirectSignIn: 'http://localhost:5173/', // App client callback URL
    redirectSignOut: 'http://localhost:5173/', // App client sign-out URL
    responseType: 'code', // OAuth grant type (code is recommended)
  },
});

Большой! Было бы забавно, если бы что-то действительно происходило, когда пользователь нажимал кнопку входа. Добавьте это в конец auth.js:

// auth.js
const button = document.getElementById('auth');
Auth.currentAuthenticatedUser()
  .then((user) => {
    // Woop, the user is signed in!
    const email = user.signInUserSession.idToken.payload.email;
    button.textContent = `Sign out ${email}`;
    button.addEventListener('click', () => Auth.signOut());
  })
  .catch(() => {
    // The user is not signed in...
    button.textContent = 'Sign in';
    button.addEventListener('click', () => Auth.federatedSignIn());
  });

Вот и все.

Часть 4: Давайте попробуем

Запустите сервер разработки с помощью:

vite

И переходим на http://localhost:5173/.

Хорошо, это не суперярко. Но давайте, это минимальный пример. Нажмите Войти.

Откроется пользовательский интерфейс Cognito Hosted. Нажмите Зарегистрироваться, чтобы создать учетную запись, и следуйте инструкциям. Теперь вы должны авторизоваться (нет, это не мой личный адрес электронной почты):

Потрясающе, мы можем входить и выходить, и я могу даже закрыть браузер и все равно войти в систему, когда открою его снова! Это все люди! И для полноты репозиторий GitHub с кодом: https://github.com/oskaerik/auth-demo