在ASP.NET Identity中删除唯一的constant并使username可以为null

本文关键字:username 并使 null constant NET ASP Identity 唯一 删除 | 更新日期: 2023-09-27 18:24:16

我覆盖了一系列类,以便在ASP.NET Identity 2.0中使用,以便它们使用电子邮件地址字段而不是电子邮件字段。

当尝试创建用户时,它会说The UserName field is required.我已经尝试用[Index(IsUnique = false)]重写ApplicationUser类中的UserName字段,该类从IdentityUser继承而来,但这只会导致创建唯一约束和非唯一索引。

我如何覆盖IdentityUser类以使用户名可以为null且不唯一,因为我不想使用它。

注意:我完全知道您可以使用UserValidator类中的AllowOnlyAlphanumericUserNames属性将电子邮件存储在username字段中。我真的不喜欢这种方法,只想删除这个限制,这样我就可以在没有用户名的情况下存储记录。我将修改我需要的任何使用用户名查看电子邮件地址的功能。

在ASP.NET Identity中删除唯一的constant并使username可以为null

以下是IUserStore-http://git.io/XZ3psA我不会说有很多工作要做。

摆脱它的唯一真正方法是实现自己的IUserStore。这听起来像是一项几乎没有实际收益的大量工作。

请参阅UserManager具有方法FindByNameAsync(),而IUserStore<TUser, in TKey>也要求方法Task<TUser> FindByNameAsync(string userName)存在于实现类上。

此外,您还需要创建自己的IdentityDbContext实现,或者在ApplicationDbContext中创建所需的表/关系,以删除唯一性验证。Whic也是另一项工作。

这是不值得的。

我发现最好的解决方案是在使用用户管理器并编写自己的逻辑之前清除用户验证器。无需覆盖任何类。

UserManager<ApplicationUser> userManager,
    userManager.UserValidators.Clear();