Asp.net

ASP.NET Core:如何使用“使用者名”而不是“電子郵件”登錄?

  • January 15, 2022

使用 asp.net core,所有的登錄頁面和視圖模型等都隱藏在引用的包中,因此無法直接更改。如何允許登錄仍然使用使用者名而不強制使用電子郵件?

第一步是為您的應用程序建構身份:

ASP.NET Core 項目中的腳手架標識

然後您可以自定義Register.cshtml/Register.cshtml.csLogin.cshtml/ Login.cshtml.cs,更新模型和視圖,並更改函式中的邏輯OnPostAsync以滿足您的要求。

根據您的要求,您可以按照以下步驟操作:

  1. 腳手架身份融入您的項目。
  2. 修改Register.cshtml.cs,添加使用者名到 InputModel
[Required]
[DataType(DataType.Text)]
[Display(Name = "User Name")]
public string UserName { get; set; }
  1. 修改OnPostAsync方法:
var user = new IdentityUser { UserName = Input.UserName, Email = Input.Email };
  1. 更新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>
  1. 修改Login.cshtml.cs, 修改InputModel為將 Email 替換為 UserName :
[Required]
[DataType(DataType.Text)]
[Display(Name = "User Name")]
public string UserName { get; set; }
  1. 修改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>
  1. 修改Login.cshtml.cs OnPostAsync方法以使用 Username 而不是 email :
var result = await _signInManager.PasswordSignInAsync(Input.UserName, Input.Password, Input.RememberMe, lockoutOnFailure: true);

預設情況下,ASP.NET Identity 用於FindByNameAsync檢查具有給定名稱的使用者是否存在,因此您不需要覆蓋PasswordSignInAsync. SignInManager如果你想用電子郵件登錄,你可以點擊這裡更新。

引用自:https://stackoverflow.com/questions/55772252