Asp.net identity 规范化DotNet Core中的用户名与用户名
我试图为MongoDB创建一个自定义的IUserLoginStore实现,在使用Asp.net identity 规范化DotNet Core中的用户名与用户名,asp.net-identity,asp.net-core-mvc,asp.net-core-identity,Asp.net Identity,Asp.net Core Mvc,Asp.net Core Identity,我试图为MongoDB创建一个自定义的IUserLoginStore实现,在使用 UserManager<ApplicationUser> 它经历了 GetUserNameAsync FindByNameAsync SetNormalizedUserNameAsync GetUserIdAsync 我想澄清两个问题: 拥有NormalizedUsername和用户名的目的是什么? 我能注意到的唯一区别是normalizedUserName是大写的 我使用我的实现只存储来自外部登
UserManager<ApplicationUser>
它经历了
GetUserNameAsync
FindByNameAsync
SetNormalizedUserNameAsync
GetUserIdAsync
我想澄清两个问题:
- 拥有NormalizedUsername和用户名的目的是什么? 我能注意到的唯一区别是normalizedUserName是大写的
- 我使用我的实现只存储来自外部登录(Google plus)的用户,有没有一种方法可以省略用户名和NormilizedUserName,因为基本上,我在这三个字段中使用电子邮件,我感觉我在复制数据,这对我来说没有任何意义
FindByNameAsync
应按u名称进行搜索。不区分大小写(您信任您的数据库设置吗?)GetNormalizedUserNameAsync
应返回user.Name.ToUpperCase()SetNormalizedUserNameAsync
不应执行任何操作name
列上的任何索引,从而影响应用程序的性能(再次检查数据库)。或者导致“客户端”执行(再次严重影响性能)。取决于您的实现
我只在内部企业系统中使用这种“最小化的”
User
类,它只使用特定的OAuth提供者,并且只接受来自指定域(Google应用)的用户。此系统不按用户名执行任何搜索,我在许多方法中安全地抛出了NotImplementedException
。规范化名称确保URL编码使用的符号,如&、?引号不包括在内,因此它可以用作QueryString()或URL,并且它将在编码过程中安然无恙
电子邮件不包含那些可能被验证检查/禁止的字符,因此在这种特殊情况下,名称和规范化名称之间没有区别。no。恐怕这完全是你的事。是的,规范化是为了阻止人们注册只有字母大小写不同的用户名。但是OP要问的是,在数据库中使用NormalizedUsername的目的是什么,与在SQL查询中运行时使用NormalizedUsername相比,它提高了性能。此处的更多信息:仅供参考,至少对于使用带有Asp.net core标识和ID4的dot net core 3.1的情况,NormalizedUserName必须为大写。否则,用户登录将失败。是的,我正在考虑使用与IUserLoginStore类似的不同界面,代码更少,我希望这些实现更精细,不会以未实现的方法结束,谢谢你的回答!一些评论:1)在大多数情况下,我建议使用
ToUpperInvariant
。2) 我认为user.Name
应该是user.UserName
。3)在许多情况下,我还将替换相关的电子邮件规范化变化(例如,<代码> FordBymail E/COD> > 4)如果使用此技术,请考虑将标准化列配置为稀疏列。5) 切题地说,在.NETCore之前,我必须做同样的事情。默认行为是通过在生成的SQL中嵌入Upper
,绕过现有索引来进行规范化。如果您只是定制get/find操作以强制通过电子邮件进行查找,而set方法仅设置电子邮件,会怎么样?该接口只需要实现方法签名,在其中放置什么取决于您。我没有对此进行测试,但问了相同的基本问题。在任何现实情况下,我都会在电子邮件和用户名上测试这个案例。使字段冗余的性能增益有多大?否决理由:答案是错误的。不删除任何字符。
GetUserNameAsync
FindByNameAsync
SetNormalizedUserNameAsync
GetUserIdAsync