NormalizedUserName VS DotNet Core中的用户名

时间:2016-09-23 01:42:13

标签: asp.net-identity asp.net-core-mvc asp.net-core-identity

我正在尝试为MongoDB创建IUserLoginStore的自定义实现,我在使用时注意到了

UserManager<ApplicationUser>

使用方法

 var userResult = await _userManager.CreateAsync(user);

它完成了

的实施
GetUserNameAsync
FindByNameAsync
SetNormalizedUserNameAsync
GetUserIdAsync

我想澄清两个问题:

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

  • 我只使用我的实施来存储来自外部登录(Google plus)的用户,有没有办法我可以省略用户名和NormilizedUserName,因为基本上我在使用电子邮件这三个领域,我觉得我重复数据并且对我没有任何意义。

任何建议?

3 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:10)

  1. 是的,你可以(如果你真的想要):
    1. import time from datetime import datetime now = datetime.now() hour = now.hour minute = now.minute L=1 while (L == 1): if minute > 39: print ("It's past "+str(hour)+":"+str(minute)) L = 2 else: print(str(minute)) time.sleep(5) 应按u.Name搜索不区分大小写(您信任您的数据库设置吗?)
    2. FindByNameAsync应返回user.Name.ToUpperCase()
    3. GetNormalizedUserNameAsync什么都不做
  2. 请注意,2.1可以跳过数据库中SetNormalizedUserNameAsync列的任何索引并损害您应用的性能(再次检查您的数据库)。或导致客户端&#39;执行(再次,显着损害性能)。取决于您的实施。

    我使用这样的&#34;最小化&#34; name类仅适用于仅使用特定OAuth提供程序并仅接受来自指定域(Google Apps)的用户的内部企业系统。此系统不会按用户名执行任何搜索,我会在许多方法中安全地抛出User

答案 2 :(得分:-2)

归一化名称可确保URL编码使用的符号(例如&、?)。和引号不包括在内,因此可以用作QueryString()或URL,并且可以毫不费力地在编码中生存。

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