使用asp.net核心,所有登录页面和视图模型等都隐藏在引用的程序包中,因此无法直接更改。如何允许登录仍然使用用户名而不强制使用电子邮件?
答案 0 :(得分:1)
第一步是为您的应用程序添加身份标识:
Scaffold Identity in ASP.NET Core projects
然后,您可以自定义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
以包括用户名:
<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>
修改Register.cshtml.cs
,修改InputModel
以将Email替换为UserName:
[Required]
[DataType(DataType.Text)]
[Display(Name = "User Name")]
public string UserName { get; set; }
修改Register.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>
默认情况下,ASP.NET Identity使用FindByNameAsync
来检查给定名称的用户是否存在,因此您不需要覆盖PasswordSignInAsync
中的SignInManager
函数。如果要使用电子邮件登录,可以单击here进行更新。
答案 1 :(得分:0)
在页面内部-> Login.cshtml页面(在这里,您将获得一个名为Login.cshtml.cs的类)。在该类中,您将获得一个名为“ OnPostAsync”的方法
按喜欢的方式更改前端
在您的'Login.cshtml.cs'类内部,使用目标仪表板/索引URL更改此方法。
public async Task<IActionResult> OnPostAsync()
{
if (ModelState.IsValid)
{
var validated = _ADService.Validate(new NetworkCredential(LoginData.UserId, LoginData.Password));
if (validated)
{
if (await _identityService.SignInAsync(HttpContext, LoginData.UserId))
{
// return Redirect("Index");
return Redirect("../app/bootstrap.html");
}
ModelState.AddModelError("", "account does not exist in system!");
return Page();
}
ModelState.AddModelError("", "userid or password is invalid!");
return Page();
}
else
{
ModelState.AddModelError("", "userid or password is blank!");
return Page();
}
}