NormalizedUserName VS Username in DotNet Core



我试图为MongoDB创建IUserLoginStore的自定义实现,我注意到当使用

UserManager<ApplicationUser>

使用

方法
 var userResult = await _userManager.CreateAsync(user);

它通过

的实现
GetUserNameAsync
FindByNameAsync
SetNormalizedUserNameAsync
GetUserIdAsync

我想澄清两个问题:

  • 拥有NormalizedUsername和UserName的目的是什么?我能注意到的唯一区别是normalizedUserName是大写的。

  • 我使用我的实现只存储用户从外部登录(Google +),是否有一种方法,我可以省略用户名和normmilizedusername,因为基本上,我在这三个字段中使用电子邮件,我觉得我在复制数据,这对我来说没有任何意义。

建议吗?

1)标准化阻止人们注册只有大小写字母不同的用户名。

  1. 是的,你可以(如果你真的想):
    1. FindByNameAsync应该搜索u.Name不区分大小写(你相信你的DB设置吗?)
    2. GetNormalizedUserNameAsync应该返回user.Name.ToUpperCase()
    3. SetNormalizedUserNameAsync不应该做任何事

请注意,2.1可以跳过数据库中name列上的任何索引,并损害您的应用程序的性能(再次检查您的数据库)。或者导致"客户端"执行(并再次严重损害性能)。

我只在内部企业系统中使用这种"最小化"的User类,它只使用特定的OAuth提供商,只接受来自指定域(Google Apps)的用户。这个系统不执行任何用户名搜索,我安全地在许多方法中抛出NotImplementedException

规范化名称确保URL编码使用的符号,如&, ?和引号不包括在内,因此它可以用作QueryString()或URL,并且它将在编码中毫发无损。

电子邮件不包含那些可能被验证检查/不允许的字符,所以在这种特殊情况下,Name和Normalized Name之间没有区别。

相关内容

  • 没有找到相关文章

最新更新