Традиционный процесс регистрации пользователя с активацией по электронной почте состоит из следующих шагов:
- Получить информацию о пользователе
- Сохраненная информация о пользователе с дополнительными метаданными
{ emailActivationDone: false, emailActivationExpiration: 'now() + 30 minutes'}
- Отправить письмо со ссылкой для активации аккаунта
- Обработать URL-адрес ссылки для активации учетной записи, обновив настройки учетной записи
{ emailActivationDone: true }
, если срок регистрации еще не истек - Есть работа по удалению / отключению всех учетных записей
where emailActivationDone == false AND emailActivationExpiration < getDate()
Обычный сценарий развертывания включает в себя приложение пользовательского интерфейса, которое собирает информацию о пользователе и отправляет его в пользовательский API. Пользовательский API создает нового пользователя в базе данных и отправляет электронное письмо, содержащее ссылку для активации. Внешнее приложение обрабатывает ссылку активации электронной почты, вызывая пользовательский API для активации пользователя (обновляя запись в базе данных пользователя). Запланированное задание очищает просроченные регистрации.
Использование функций Azure Durable в этом сценарии
Реализация устойчивой функции в этом сценарии выгодна по следующим причинам:
- Единая единица развертывания: единое развертывание функции Azure реализует рабочий процесс, не требуя запланированного задания для очистки попыток регистрации с истекшим сроком действия.
- упрощенная модель базы данных: пользователь создается в базе данных только после успешной активации электронной почты, оставляя вашу базу данных свободной от неполных регистраций пользователей.
- гибкость: оркестровка рабочего процесса обеспечивает четко определенный контракт для запроса статуса запущенного экземпляра. Добавление проверки доменов из черного списка в рабочий процесс возможно без каких-либо изменений ни в одном из приложений вызывающего абонента.
Подробности реализации можно найти в репозитории GitHub по адресу https://github.com/fbeltrao/Samples/tree/master/serverless-user-email-confirmation