如何在MVC Identity中使用"UserName"而不是"Email"登录?

Kev*_*ell 18 asp.net asp.net-mvc razor asp.net-identity

我需要将我的登录设置为使用用户名而不是电子邮件地址,我该如何更改?

Jas*_*ner 22

它实际上使用电子邮件地址作为用户名,因此在ASPNetUsers表中,您将看到包含电子邮件地址的用户名和电子邮件字段.

进入AccountController,查找Register方法(POST).

改变这个:

var user = new ApplicationUser { UserName = model.Email, Email = model.Email};
Run Code Online (Sandbox Code Playgroud)

对此:

var user = new ApplicationUser
            {
                UserName = model.UserName,
                Email = model.Email
            };
Run Code Online (Sandbox Code Playgroud)

然后进入Login.cshtml并将所有相应的电子邮件模型字段更改为用户名.

最后,进入AccountController中的Login方法(POST)并将model.Email更改为model.UserName.

var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, 
             model.RememberMe, shouldLockout: false);
Run Code Online (Sandbox Code Playgroud)

您还必须在AccountViewModels.cs中进行更改才能引入新的UserName属性.

  • @codebrain进入Models文件夹下的AccountViewModels,查找LoginViewModel,你需要在那里添加一个UserName属性.您还必须对RegisterViewModel执行相同的操作.这绝对是很多东西,但练习是关键! (5认同)
  • 谢谢杰森.问题是当我输入`model.UserName`时,我得到了红色下划线,即使我输入`model`,我也看不到要选择的UserName选项. (2认同)
  • @KevinMaxwell在RegisterViewModel.cs中,将属性`Email`更改为`UserName`,从中删除[EmailAddress]批注,并将`[Display(Name =“ Email”)]]更改为`[Display(Name =“ Login” )]`或您要显示的内容。如果要保留“电子邮件”属性,则将“用户名”属性添加到相同的视图模型中,并根据需要进行设置。 (2认同)