Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net identity 规范化DotNet Core中的用户名与用户名_Asp.net Identity_Asp.net Core Mvc_Asp.net Core Identity - Fatal编程技术网

Asp.net identity 规范化DotNet Core中的用户名与用户名

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是大写的 我使用我的实现只存储来自外部登

我试图为MongoDB创建一个自定义的IUserLoginStore实现,在使用

UserManager<ApplicationUser>
它经历了

GetUserNameAsync
FindByNameAsync
SetNormalizedUserNameAsync
GetUserIdAsync
我想澄清两个问题:

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

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

有什么建议吗?

1)规范化可以阻止人们注册只有字母大小写不同的用户名

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

  • 是的,你可以(如果你真的想):
  • FindByNameAsync
    应按u名称进行搜索。不区分大小写(您信任您的数据库设置吗?)
  • GetNormalizedUserNameAsync
    应返回user.Name.ToUpperCase()
  • SetNormalizedUserNameAsync
    不应执行任何操作
  • 请注意,2.1可能会跳过数据库中
    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