ASP.NET Boilerplate允许自我配置租户注册

问题描述 投票:0回答:2

所以我试图用ASP.NET Boilerplate创建一个SaaS应用程序,我遇到了一些问题如下:

当我观察框架时,我注意到UserRegistrationManager中的“RegisterAsync”函数基于当前活动的租户创建用户。这意味着如果我当前登录租户'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!");
            }
        }

我想要构建的应用程序要求新用户能够注册免费试用然后付费订阅。所以我认为新用户应该能够自己创建租户。因此,如果新用户注册,他们将被迫创建新租户,然后他们可以在应用程序中执行任何其他操作。

问题是User表中的tenantId列不能为null,所以我可以在没有租户的情况下注册。我想首先将所有新创建的用户分配给“默认”租户,但我认为这不是最佳做法。

有没有办法克服这个问题或任何关于它的参考?提前致谢!

c# asp.net multi-tenant aspnetboilerplate asp.net-boilerplate
2个回答
0
投票

我查看了代码和文档,我认为绝不允许未知用户创建新租户。这应该由具有创建租户的正确授权的人员执行。这是主机租户中存在的用户。您作为主机租户的管理员需要为其他人创建租户并将其添加为该租户的管理员。

然后,通过正常方式注册用户,并为该租户运行注册网页。

怎么做,我留给你弄清楚样板本身的文档! Documentation


0
投票

根据我的经验SaaS应用程序开发经验,多租户应用程序中的典型自我注册流程将如下所示

  1. 用户选择自签名
  2. 允许用户选择订阅计划(很可能是试用计划)
  3. 获取公司名称(租户名称)作为注册流程的一部分
  4. 创建具有订阅的新租户(2)
  5. 添加注册用户作为该租户的管理员
  6. 如果是试用计划,请设置合适的请求处理程序以继续验证租户是否已超过订阅的试用天数,在这种情况下,强制重定向到付款页面或注销
  7. 如果用户选择注册以获得付费订阅(在注册期间),则在配置租户之后转到付款页面。付款成功后,捕获transactionid并允许用户登录并使用该应用程序。

您想要使用的流程非常简单

  1. 构建自定义自注册过程,获取公司名称(租户名称)
  2. 还捕获正在执行注册的用户的电子邮件ID
  3. 根据(1)的信息创建租户
  4. 根据(2)中的信息设置租户的管理员

您的所有API调用都应该正常工作。

注意

  • 有一个单独的自我注册服务,如(TenantSelfRegistrationService),以便您可以允许匿名访问该服务。
  • 在安全性方面,设置验证码和设置速率限制或CSRF令牌等,以在注册过程中强制执行安全性。

希望这澄清一下

© www.soinside.com 2019 - 2024. All rights reserved.