允许重复电子邮件或用户名的多租户应用程序身份
Identity for multi-tenant app allowing duplicatie email or username
我有一个多租户 web/mobile 应用程序,它的 membership/authentication 使用 Asp.Net Identity
。用户可以通过 android 应用程序或直接通过网络界面使用该应用程序。他们必须注册才能使用该应用程序。
问题是一个 email/username/phone 号码的用户不能同时注册多个租户。例如,假设一个租户专用于会计,而另一个租户专用于消息传递。一个用户想用一个唯一的 email/username/phone 在他们两个中注册。但是Identity
自然不允许重复email/username/phone。
我在 IdentityUser
实体中引入了一个 AppId
。所以很明显什么用户属于什么应用程序。解决方法是使用 AppId
。例如在 username
前面附加 AppId
以使其唯一。
这个场景有什么好的设计吗?
如果您想为用户帐户实施自己的验证规则,则必须实施自己的 IIdentityValidator<TUser>
。可能最简单的方法是继承框架的 UserValidator<TUser>
class (see source here) 并覆盖 class 的相关部分。如果您想在租户中添加 username/email 唯一性,但允许不同租户使用相同的电子邮件,这将很有用。
一旦你有了你的实现,你就把它插入到 UserManager.UserValidator
中,它采用 IIdentityValidator<TUser>
的一个实例
我有一个多租户 web/mobile 应用程序,它的 membership/authentication 使用 Asp.Net Identity
。用户可以通过 android 应用程序或直接通过网络界面使用该应用程序。他们必须注册才能使用该应用程序。
问题是一个 email/username/phone 号码的用户不能同时注册多个租户。例如,假设一个租户专用于会计,而另一个租户专用于消息传递。一个用户想用一个唯一的 email/username/phone 在他们两个中注册。但是Identity
自然不允许重复email/username/phone。
我在 IdentityUser
实体中引入了一个 AppId
。所以很明显什么用户属于什么应用程序。解决方法是使用 AppId
。例如在 username
前面附加 AppId
以使其唯一。
这个场景有什么好的设计吗?
如果您想为用户帐户实施自己的验证规则,则必须实施自己的 IIdentityValidator<TUser>
。可能最简单的方法是继承框架的 UserValidator<TUser>
class (see source here) 并覆盖 class 的相关部分。如果您想在租户中添加 username/email 唯一性,但允许不同租户使用相同的电子邮件,这将很有用。
一旦你有了你的实现,你就把它插入到 UserManager.UserValidator
中,它采用 IIdentityValidator<TUser>