我有一个多租户 Web/移动应用程序,它使用 Asp.Net Identity
作为其成员资格/身份验证。用户可以通过安卓应用程序或直接通过网络界面使用该应用程序。他们必须注册才能使用该应用程序。
问题是具有单个电子邮件/用户名/电话号码的用户无法同时在多个租户中注册。例如,假设一个租户专用于会计,另一个租户专用于消息传递。用户希望使用一个唯一的电子邮件/用户名/电话在这两个中注册。但是Identity
自然不允许重复的电子邮件/用户名/电话。
我在IdentityUser
实体中引入了一个AppId
。所以很明显,哪个用户属于什么应用程序。解决方法是使用 AppId
。例如,在username
前面附加AppId
以使其独一无二。
对于这种情况,有什么好的设计吗?
如果要为用户帐户实现自己的验证规则,则必须实现自己的IIdentityValidator<TUser>
。可能最简单的方法是从框架的UserValidator<TUser>
类继承(请参阅此处的源代码(并覆盖类的相关部分。如果要在租户中添加用户名/电子邮件唯一性,但允许在不同租户之间使用相同的电子邮件,这将非常有用。
一旦你有了你的实现,你就可以把它插入到UserManager.UserValidator
,它需要一个IIdentityValidator<TUser>