3

我试图创造IUserLoginStore的MongoDB的自定义实现,我注意到我想澄清两个问题:NormalizedUserName VS用户名在DOTNET的核心

  • 拥有NormalizedUsername和UserName的目的是什么? 唯一的区别是,我可以注意到标准化的用户名是大写的。

  • 我使用我的实现只存储用户从外部登录(谷歌加),有没有办法,我可以省略用户名和NormilizedUserName自从基本上,我在这三个领域使用电子邮件,我感觉我在复制数据,对我没有任何意义。

有什么建议吗?

回答

5

1)规范化停止注册用户名的人,这些用户名仅在字母大小写方面不同。

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

+0

你能指出一个基本的用户商店实现吗? –

+1

没有。恐怕完全在你手中。 – blowdart

+0

是的,正常化是为了阻止人们注册用户名,这些用户名仅在字母大小写方面不同。但是OP要求的内容是什么,即数据库中“拥有NormalizedUsername的目的是什么”,就是与在SQL查询中在运行时执行此操作相比,它提高了性能。更多的信息在这里:https://github.com/aspnet/Identity/issues/351 –

4
  • 是的,你可以(如果你真的想):
    1. FindByNameAsync应u.Name不区分大小写的搜索
    2. (你信任你的数据库设置?)
    3. GetNormalizedUserNameAsync应该返回user.Name.ToUpperCase()
    4. SetNormalizedUserNameAsync应该什么都不做
  • 请注意,2.1可跳过DB中name列的任何索引,并损害您应用的性能(请再次检查您的数据库)。或者导致“客户端”执行(并且再次严重损害性能)。取决于你的实现。

    我仅在仅使用特定OAuth提供程序并仅接受来自指定域(Google Apps)的用户的内部企业系统中使用此类“最小化”User类。这个系统不会按用户名进行任何搜索,我可以用许多方法安全地丢弃NotImplementedException

    +0

    是啊,我正在考虑与IUserLoginStore类似的接口,使用较少的代码,我喜欢那些实现更细化,没有结束没有实现方法,谢谢你的答案! –