DotNet Core 中的规范化用户名 VS 用户名
NormalizedUserName VS Username in DotNet Core
我正在尝试为 MongoDB 创建 IUserLoginStore 的自定义实现,我在使用
时注意到
UserManager<ApplicationUser>
用方法
var userResult = await _userManager.CreateAsync(user);
它经历了
的实施
GetUserNameAsync
FindByNameAsync
SetNormalizedUserNameAsync
GetUserIdAsync
我想澄清两个问题:
拥有 NormalizedUsername 和 UserName 的目的是什么?
我注意到的唯一区别是 normalizedUserName 是大写的。
我只使用我的实现来存储来自外部登录的用户(Google plus),有没有一种方法可以省略用户名和 NormilizedUserName,因为基本上,我是在这三个字段中使用电子邮件,我觉得我在重复数据,这对我来说没有任何意义。
有什么建议吗?
1) 规范化阻止人们注册仅字母大小写不同的用户名。
2) 否 - 这些字段是基本数据模型的一部分。
- 是的,你可以(如果你真的想要):
FindByNameAsync
应按 u.Name 不区分大小写的方式搜索(您信任您的数据库设置吗?)
GetNormalizedUserNameAsync
应该 return user.Name.ToUpperCase()
SetNormalizedUserNameAsync
什么都不做
请注意,2.1 可以跳过数据库中 name
列上的任何索引并损害您应用程序的性能(再次检查您的数据库)。或导致 'client-side' 执行(并且再次显着损害性能)。取决于您的实施。
我只在内部企业系统中使用这样的 "minimized" User
class,它只使用特定的 OAuth 提供程序并且只接受来自指定域的用户(Google 应用程序)。该系统不按用户名执行任何搜索,我在许多方法中安全地抛出 NotImplementedException
。
标准化名称确保 URL 编码使用的符号,例如 &、?并且不包含引号,因此它可以用作 QueryString() 或 URL,并且它将在编码中完好无损。
电子邮件不包含那些可能 checked/disallowed 验证的字符,因此在这种特殊情况下,名称和规范化名称之间没有区别。
我正在尝试为 MongoDB 创建 IUserLoginStore 的自定义实现,我在使用
时注意到UserManager<ApplicationUser>
用方法
var userResult = await _userManager.CreateAsync(user);
它经历了
的实施GetUserNameAsync
FindByNameAsync
SetNormalizedUserNameAsync
GetUserIdAsync
我想澄清两个问题:
拥有 NormalizedUsername 和 UserName 的目的是什么? 我注意到的唯一区别是 normalizedUserName 是大写的。
我只使用我的实现来存储来自外部登录的用户(Google plus),有没有一种方法可以省略用户名和 NormilizedUserName,因为基本上,我是在这三个字段中使用电子邮件,我觉得我在重复数据,这对我来说没有任何意义。
有什么建议吗?
1) 规范化阻止人们注册仅字母大小写不同的用户名。
2) 否 - 这些字段是基本数据模型的一部分。
- 是的,你可以(如果你真的想要):
FindByNameAsync
应按 u.Name 不区分大小写的方式搜索(您信任您的数据库设置吗?)GetNormalizedUserNameAsync
应该 return user.Name.ToUpperCase()SetNormalizedUserNameAsync
什么都不做
请注意,2.1 可以跳过数据库中 name
列上的任何索引并损害您应用程序的性能(再次检查您的数据库)。或导致 'client-side' 执行(并且再次显着损害性能)。取决于您的实施。
我只在内部企业系统中使用这样的 "minimized" User
class,它只使用特定的 OAuth 提供程序并且只接受来自指定域的用户(Google 应用程序)。该系统不按用户名执行任何搜索,我在许多方法中安全地抛出 NotImplementedException
。
标准化名称确保 URL 编码使用的符号,例如 &、?并且不包含引号,因此它可以用作 QueryString() 或 URL,并且它将在编码中完好无损。
电子邮件不包含那些可能 checked/disallowed 验证的字符,因此在这种特殊情况下,名称和规范化名称之间没有区别。