web-dev-qa-db-ja.com

MVC Identityで「Email」の代わりに「UserName」でログインする方法は?

メールアドレスの代わりにユーザー名を使用するようにログインを設定する必要があります。どうすれば変更できますか?

18
Kevin Maxwell

実際にはユーザー名として電子メールアドレスを使用しているため、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);

また、新しいUserNameプロパティを導入するには、AccountViewModels.csを変更する必要があります。

22
Jason Roner

これがあなたのやり方です

 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*/
 }

ユーザー名がusername = testおよびemail = [email protected]であると考えている場合、myemail @ ...の代わりにtestを使用してユーザーの認証を許可します。

PS。 @Jasonからの回答は機能しますが、メールを使用せずに実際のユーザー名とパスワードでユーザーを認証したい場合があります。

この場合、私の答えを使用してください

2
Bellash