ASP.NET Boilerplate позволяет самостоятельную регистрацию арендаторов - PullRequest
0 голосов
/ 18 марта 2019

, поэтому я пытаюсь создать SaaS-приложение с ASP.NET Boilerplate, и я сталкиваюсь с некоторой проблемой следующим образом:

Наблюдая за фреймворком, я заметил, что функция «RegisterAsync» в UserRegistrationManager создает пользователя на основе текущего активного арендатора. Это означает, что если я в данный момент авторизируюсь на арендаторе '1', то при регистрации нового пользователя новый пользователь будет иметь tenantId '1'. С другой стороны, когда я в настоящее время не вошел в систему, если я зарегистрирую нового пользователя, приложение покажет исключение «не может зарегистрировать пользователя хоста».

public async Task<User> RegisterAsync(string name, string surname, string emailAddress, string phoneNumber, string userName, string plainPassword, bool isEmailConfirmed)
        {
            CheckForTenant();

            var tenant = await GetActiveTenantAsync();

            var user = new User
            {
                TenantId = tenant.Id,
                Name = name,
                Surname = surname,
                EmailAddress = emailAddress,
                PhoneNumber = phoneNumber,
                IsActive = true,
                UserName = userName,
                IsEmailConfirmed = isEmailConfirmed,
                Roles = new List<UserRole>()
            };

            return user;
        }

private void CheckForTenant()
        {
            if (!AbpSession.TenantId.HasValue)
            {
                throw new InvalidOperationException("Can not register host users!");
            }
        }

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

Проблема в том, что столбец tenantId в таблице User не может быть пустым, поэтому я могу зарегистрироваться без арендатора. Сначала я думаю назначить всех вновь созданных пользователей арендатором «По умолчанию», но думаю, что это не лучшие практики.

Есть ли способ преодолеть эту проблему или какие-либо упоминания об этом? Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 24 марта 2019

Исходя из моего эмпирического опыта разработки приложений SaaS, типичный поток саморегистрации в мультитенантных приложениях будет таким же, как приведенный ниже

  1. Пользователь выбирает самозаполнение
  2. Разрешить пользователю выбирать план подписки (скорее всего, пробный план)
  3. Получить название компании (имя арендатора) в рамках процесса регистрации
  4. Создать нового арендатора с подпиской(2)
  5. Добавьте зарегистрированного пользователя в качестве администратора для этого арендатора
  6. В случае пробного плана, установите подходящий обработчик запросов, чтобы он продолжал проверять, пересек ли арендатор подписанное число:пробные дни, в этом случае принудительно перенаправьте на страницу оплаты или выйдите из системы
  7. Если пользователь выбрал «Регистрация для платной подписки (во время регистрации)», после предоставления клиенту перейдите на страницу оплаты.Как только платеж завершится успешно, сохраните идентификатор транзакции и позвольте пользователю войти в систему и использовать приложение.

Поток, который вы хотели использовать, прост:

  1. Создание собственного я-подпишитесь, получите название компании (имя арендатора)
  2. Также запишите электронный идентификатор пользователя, который выполняет регистрацию
  3. Создайте арендатора на основе информации из (1)
  4. Установите администратора для арендатора на основе информации из (2)

Все ваши вызовы API должны работать нормально.

Примечание

  • Имеется отдельная служба саморегистрации, например (TenantSelfRegistrationService), чтобы вы могли разрешить анонимный доступ к этой службе.
  • С точки зрения безопасности установите капчу и установите ограничения скорости или токены CSRF и т. Д., Чтобы обеспечить безопасность в процессе регистрации.

Надеюсь, это проясняет

0 голосов
/ 18 марта 2019

Я посмотрел код и документацию и думаю, что вы никогда не должны позволять неизвестному пользователю создавать новых арендаторов.Это должно произойти лицом, имеющим правильное разрешение на создание арендаторов.Это пользователь, который существует в клиенте хоста.Вы, как администратор, в арендаторе хоста должны создать арендатора для кого-то другого и добавить его в качестве администратора для этого арендатора.

Регистрация пользователей затем выполняется обычным способом, при этом веб-страница регистрации работает для этого арендатора.

Как это сделать, я оставляю вам разобраться с документацией самого шаблона! Документация

...