Asp.net
ASP.NET Core:如何使用“使用者名”而不是“電子郵件”登錄?
使用 asp.net core,所有的登錄頁面和視圖模型等都隱藏在引用的包中,因此無法直接更改。如何允許登錄仍然使用使用者名而不強制使用電子郵件?
第一步是為您的應用程序建構身份:
然後您可以自定義
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.csOnPostAsync方法以使用 Username 而不是 email :var result = await _signInManager.PasswordSignInAsync(Input.UserName, Input.Password, Input.RememberMe, lockoutOnFailure: true);預設情況下,ASP.NET Identity 用於
FindByNameAsync檢查具有給定名稱的使用者是否存在,因此您不需要覆蓋PasswordSignInAsync.SignInManager如果你想用電子郵件登錄,你可以點擊這裡更新。