在“用户名”列下更改ASP .NET CORE身份默认电子邮件地址

时间:2019-04-15 13:39:25

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

ASP .NET CORE身份将电子邮件地址默认存储在“用户名”列下。如何将其从将电子邮件地址作为用户名存储到自定义名称作为用户名?

3 个答案:

答案 0 :(得分:1)

这就是默认UI对其进行处理的方式。如果您想以其他方式进行操作,则需要将“注册”页面安装到您的项目中并进行更改。具体来说,您正在Register.cshtml.cs中寻找这一行:

await _userStore.SetUserNameAsync(user, Input.Email, CancellationToken.None);

在那里,您只需将Input.Email更改为Input.UserName之类的内容。当然,您需要向页面模型添加UserName属性,以便您可以首先收集此信息,并相应地向视图添加输入。

答案 1 :(得分:1)

您始终可以将脚手架注册页面更改为同时包含用户名字段和电子邮件字段。该模型已经拥有两者。

更重要的是,如果您愿意拥有单独的用户名字段,则必须在通过电子邮件地址检索用户的地方更加小心。如果电子邮件地址不是唯一的,那么如果您不注意这些地方,您就会遇到麻烦。特别是在重置密码页面等页面上。

我也遇到过类似的情况。我们的应用程序最初构建为将电子邮件作为用户名。因此在数据库中用户名和电子邮件都是相同的。所以在整个应用程序中有很多页面我们通过电子邮件检索用户。然后客户想要非电子邮件用户名。支持后,重置密码不起作用,因为电子邮件地址不是唯一的,并且有多个用户使用同一电子邮件。

要解决这个问题,我可以做的是更改重置密码 Uis 或将电子邮件设为唯一字段。

使电子邮件在 asp 中独一无二。 Net 核心身份,您可以使用 options.User.RequireUniqueEmail = true;在身份服务 Startup.cs 文件中。

虽然现在回答这个问题为时已晚,但我还是想今天回答这个问题,因为这可能对 2021 年的某个人有所帮助

答案 2 :(得分:0)

scaffold Identity并注册用户时,OnPostAsync中的Register.cshtml.cs处理程序将使用以下代码创建用户,该用户决定UserName列的值。

var user = new IdentityUser { UserName = Input.Email, Email = Input.Email };
var result = await _userManager.CreateAsync(user, Input.Password);

您可以将UseName = Input.Email更改为自定义名称。