所以我试图用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,因此我可以在没有租户的情况下进行注册。我想首先将所有新创建的用户分配给“默认”租户,但是我认为这不是最佳实践。
是否有任何方法可以克服此问题或有关此问题的任何参考资料?预先感谢!
答案 0 :(得分:0)
我查看了代码和文档,我认为您永远不应允许未知用户创建新的租户。这应该由拥有正确权限来创建租户的人来完成。这是主机租户中存在的用户。 您作为主机租户的管理员需要为其他人创建租户,并将其添加为该租户的管理员。
然后按照正常方式为该租户运行注册网页,完成用户注册。
该如何做,我请您自己弄清楚样板文件! Documentation
答案 1 :(得分:0)
根据我的经验性SaaS应用程序开发经验,多租户应用程序中的典型“自注册”流程将类似于下面给出的
您想要使用的流程很简单
您所有的API调用都应该可以正常工作。
注意
希望这可以澄清