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

时间:2019-03-18 08:42:28

标签: c# asp.net multi-tenant aspnetboilerplate asp.net-boilerplate

所以我试图用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!");
            }
        }

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

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

是否有任何方法可以克服此问题或有关此问题的任何参考资料?预先感谢!

2 个答案:

答案 0 :(得分:0)

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

然后按照正常方式为该租户运行注册网页,完成用户注册。

该如何做,我请您自己弄清楚样板文件! Documentation

答案 1 :(得分:0)

根据我的经验性SaaS应用程序开发经验,多租户应用程序中的典型“自注册”流程将类似于下面给出的

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

您想要使用的流程很简单

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

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

注意

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

希望这可以澄清