C# ASP.NET身份更改验证

C# ASP.NET身份更改验证,c#,asp.net,asp.net-mvc,asp.net-identity,identity,C#,Asp.net,Asp.net Mvc,Asp.net Identity,Identity,我想为我创建的几个网站使用ASP.NET标识,并且我确实想在每个网站上使用相同的数据库 当我尝试用同一封电子邮件注册两个用户时,我会得到“Name******已被占用”。我已经在IdentityConfig中设置了字段“RequireUniqueEmail=false” 在AspNetUsers中,我有一个名为“web_id”的字段。应该可以在一个web_id内创建一个相同的用户,但应该可以在不同的web_id上创建具有相同电子邮件的用户 有人知道我怎么做吗?这是Identity UserVal

我想为我创建的几个网站使用ASP.NET标识,并且我确实想在每个网站上使用相同的数据库

当我尝试用同一封电子邮件注册两个用户时,我会得到“Name******已被占用”。我已经在IdentityConfig中设置了字段“RequireUniqueEmail=false”

在AspNetUsers中,我有一个名为“web_id”的字段。应该可以在一个web_id内创建一个相同的用户,但应该可以在不同的web_id上创建具有相同电子邮件的用户


有人知道我怎么做吗?

这是Identity UserValidator的源代码。您可以看到,如果设置为“RequireUniqueEmail=false”,它将不再验证电子邮件,这并不理想

我可以想到两种解决方案:

  • 将(email,web_id)作为db模式中的分组键/索引,在这种情况下,它们中的任何一个都可以复制,但不能两者都复制。然后在创建用户时处理错误,如果由于此索引重复而无法创建用户,则将其视为重复电子邮件。当然,在这种情况下需要设置“RequireUniqueEmail=false”

  • 或者创建UserValidator或interface IUserValidator的子类,实现自己的逻辑来检查(email、web_id),然后将其设置为UserManager


  • 谢谢你的回答。如果我设置“RequireUniqueEmail=false”,我仍然会收到此错误消息-“名称o******@hotmail.com已被采用。我正在使用Identity的最新版本。如何使它们成为db模式中的分组键/索引?创建UserValidator的子类似乎是最好的选择,但我不知道如何用自己的逻辑实现它。。你有这样做的例子吗?不幸的是,我没有这个例子,也许你可以谷歌“用户验证身份自定义”并自己解决。这里有一个,实际上帮助很大。谢谢我已经通过了UserValidator,但是现在我遇到了一个新问题。“一个或多个实体的验证失败。有关详细信息,请参阅'EntityValidationErrors'属性。”它显示为“错误行”var result=wait UserManager.CreateAsync(用户、模型、密码);似乎在CustomUserValidator之后,它又检查了一次,因为我尝试了一次try/catch,我得到了这样的消息:ErrorMessage“用户名o*********@hotmail.com已经被占用了。”。