DotNet Core 中的规范化用户名 VS 用户名

NormalizedUserName VS Username in DotNet Core

我正在尝试为 MongoDB 创建 IUserLoginStore 的自定义实现,我在使用

时注意到
UserManager<ApplicationUser>

用方法

 var userResult = await _userManager.CreateAsync(user);

它经历了

的实施
GetUserNameAsync
FindByNameAsync
SetNormalizedUserNameAsync
GetUserIdAsync

我想澄清两个问题:

有什么建议吗?

1) 规范化阻止人们注册仅字母大小写不同的用户名。

2) 否 - 这些字段是基本数据模型的一部分。

  1. 是的,你可以(如果你真的想要):
    1. FindByNameAsync 应按 u.Name 不区分大小写的方式搜索(您信任您的数据库设置吗?)
    2. GetNormalizedUserNameAsync 应该 return user.Name.ToUpperCase()
    3. SetNormalizedUserNameAsync什么都不做

请注意,2.1 可以跳过数据库中 name 列上的任何索引并损害您应用程序的性能(再次检查您的数据库)。或导致 'client-side' 执行(并且再次显着损害性能)。取决于您的实施。

我只在内部企业系统中使用这样的 "minimized" User class,它只使用特定的 OAuth 提供程序并且只接受来自指定域的用户(Google 应用程序)。该系统不按用户名执行任何搜索,我在许多方法中安全地抛出 NotImplementedException

标准化名称确保 URL 编码使用的符号,例如 &、?并且不包含引号,因此它可以用作 QueryString() 或 URL,并且它将在编码中完好无损。

电子邮件不包含那些可能 checked/disallowed 验证的字符,因此在这种特殊情况下,名称和规范化名称之间没有区别。