如何使用" UserName"而不是"电子邮件"在MVC身份?

时间:2015-10-11 19:26:56

标签: asp.net asp.net-mvc razor asp.net-identity

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

2 个答案:

答案 0 :(得分:21)

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

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

改变这个:

var user = new ApplicationUser { UserName = model.Email, Email = model.Email};

到此:

var user = new ApplicationUser
            {
                UserName = model.UserName,
                Email = model.Email
            };

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

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

var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, 
             model.RememberMe, shouldLockout: false);

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

答案 1 :(得分:1)

这是您的操作方式

 var user = await _userManager.Users
           .FirstOrDefaultAsync(u => u.UserName == username || u.Email == username); 
 if (user != null){
    var result = await _signInManager
                .PasswordSignInAsync(/*email*/user.Email, password, false, false);
    /*removed for brevity*/
 }

假设您有一个用户名= test和电子邮件= {myemail@example.com的用户,那么您希望允许用户使用测试而不是myemail @ ...进行身份验证。

PS。虽然@Jason的答案有效,但有时您希望使用真实的用户名和密码而不是电子邮件来对用户进行身份验证。

在这种情况下,请使用我的答案