ASP.NET Core:如何使用“用户名”而不是“电子邮件”登录?

时间:2019-04-20 09:45:15

标签: asp.net asp.net-core

使用asp.net核心,所有登录页面和视图模型等都隐藏在引用的程序包中,因此无法直接更改。如何允许登录仍然使用用户名而不强制使用电子邮件?

2 个答案:

答案 0 :(得分:1)

第一步是为您的应用程序添加身份标识:

Scaffold Identity in ASP.NET Core projects

然后,您可以自定义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; }
    
  3. 修改OnPostAsync方法:

    var user = new IdentityUser { UserName = Input.UserName, Email = Input.Email };
    
  4. 更新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>
    
  5. 修改Register.cshtml.cs,修改InputModel以将Email替换为UserName:

    [Required]
    [DataType(DataType.Text)]
    [Display(Name = "User Name")]
    public string UserName { get; set; }
    
  6. 修改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”的方法

按喜欢的方式更改前端

enter image description here

在您的'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();
        }
    }