使用asp.net核心,所有登录页面和视图模型等都隐藏在引用的程序包中,因此无法直接更改。如何允许登录仍然使用用户名而不强制使用电子邮件?
第一步是将身份标识到您的应用程序:
然后,您可以自定义Register.cshtml
/Register.cshtml.cs
和Login.cshtml
/ Login.cshtml.cs
,更新模型和视图,并更改OnPostAsync
功能中的逻辑以适合您的要求。
根据您的要求,您可以按照以下步骤操作:
修改Register.cshtml.cs
,将用户名添加到InputModel
:
[Required]
[DataType(DataType.Text)]
[Display(Name = "User Name")]
public string UserName { get; set; }
修改OnPostAsync
方法:
var user = new IdentityUser { UserName = Input.UserName, Email = Input.Email };
更新,Register.cshtml
以包含UserName:
<div class="form-group">
<label asp-for="Input.UserName"></label>
<input asp-for="Input.UserName" class="form-control"/>
<span asp-validation-for="Input.UserName" class="text-danger"></span>
</div>
修改Login.cshtml.cs
,InputModel
以将Email替换为UserName:
[Required]
[DataType(DataType.Text)]
[Display(Name = "User Name")]
public string UserName { get; set; }
修改Login.cshtml
:
<div class="form-group">
<label asp-for="Input.UserName"></label>
<input asp-for="Input.UserName" class="form-control" />
<span asp-validation-for="Input.UserName" class="text-danger"></span>
</div>
修改Login.cshtml.cs
OnPostAsync
方法以使用用户名而不是电子邮件:
var result = await _signInManager.PasswordSignInAsync(Input.UserName, Input.Password, Input.RememberMe, lockoutOnFailure: true);
默认情况下,ASP.NET Identity用于FindByNameAsync
检查具有给定名称的用户是否存在,因此您无需重写中的PasswordSignInAsync
功能SignInManager
。如果要使用电子邮件登录,可以单击此处进行更新。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句