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