【发布时间】:2019-04-15 13:39:25
【问题描述】:
ASP .NET CORE Identity 在用户名列下默认存储电子邮件地址。如何将其从将电子邮件地址存储为用户名更改为自定义名称作为用户名?
【问题讨论】:
标签: .net asp.net-mvc asp.net-core asp.net-identity
ASP .NET CORE Identity 在用户名列下默认存储电子邮件地址。如何将其从将电子邮件地址存储为用户名更改为自定义名称作为用户名?
【问题讨论】:
标签: .net asp.net-mvc asp.net-core asp.net-identity
这就是默认 UI 处理它的方式。如果您想以另一种方式进行操作,则需要将“注册”页面搭建到您的项目中并进行更改。具体来说,您正在Register.cshtml.cs 中寻找这一行:
await _userStore.SetUserNameAsync(user, Input.Email, CancellationToken.None);
在那里,您只需将Input.Email 更改为Input.UserName 之类的东西。当然,您需要将UserName 属性添加到页面模型,以便您可以首先收集此信息,并相应地向视图添加输入。
【讨论】:
您始终可以将脚手架注册页面更改为同时包含用户名字段和电子邮件字段。该模型已经拥有两者。
更重要的是,如果您愿意使用单独的用户名字段,则必须在通过电子邮件地址检索用户的地方更加小心。如果电子邮件地址不是唯一的,那么如果您不注意这些地方,您就会遇到麻烦。特别是在重置密码页面等页面上。
我也遇到过类似的情况。我们的应用程序最初构建为使用电子邮件作为用户名。因此,在数据库中,用户名和电子邮件都是相同的。因此,在整个应用程序中,有很多页面我们通过电子邮件检索用户。然后客户想要非电子邮件用户名。支持后,重置密码不起作用,因为电子邮件地址不是唯一的,并且有多个用户使用相同的电子邮件。
要解决这个问题,我可以做的是更改重置密码 UI 或将电子邮件设为唯一字段。
使电子邮件在 asp 中独一无二。您可以使用的网络核心标识 options.User.RequireUniqueEmail = true;在身份服务 Startup.cs 文件中。
尽管现在回答这个问题为时已晚,但我还是想在今天回答这个问题,因为这可能对 2021 年的某些人有所帮助
【讨论】:
当您scaffold Identity 并注册用户时,Register.cshtml.cs 中的OnPostAsync 处理程序具有以下代码来创建决定UserName 列的值的用户。
var user = new IdentityUser { UserName = Input.Email, Email = Input.Email };
var result = await _userManager.CreateAsync(user, Input.Password);
您可以将 UseName = Input.Email 更改为您的自定义名称。
【讨论】: