web-dev-qa-db-ja.com

ID 2で電子メールを使用してログインする方法は?

MVC5 Identity 2では、SignInManager.PasswordSignInAsyncはログイン用のユーザー名を取得します。

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

しかし、私のユーザー名とメールアドレスは同じではありません。ログイン用のメールアドレスが欲しいのですが、どうすればいいですか?ありがとう

16
Nazmul Hossain

メールでUserManagerからユーザーを取得します。

var user = UserManager.FindByEmail(email);

次に、SignInManagerのPasswordSignInAsyncをユーザーのユーザー名とともに使用します

var result = await SignInManager
.PasswordSignInAsync(user.UserName,password,isPersistent,shouldLockout);

または、SignInManager内にこのメソッドを追加します( ASP.NET Identityディスカッション

public async Task<SignInStatus> PasswordEmailSignInAsync(string email, string password, bool isPersistent, bool shouldLockout)
{
      var user =  UserManager.FindByEmail(email);
      return await PasswordSignInAsync(user.UserName,password,isPersistent,shouldLockout);
}

次に、PasswordSignInAsyncと同じように使用しますが、usermaneの代わりにユーザーの電子メールを使用します。

38
tmg

ユーザーがユーザー名OR Eメール)を介してログインできるようにしたかったのです。これが設定方法です。

var isEmail = ValidationManager.IsValidEmailAddress(model.Username);

SignInStatus result = SignInStatus.Failure;

if (!isEmail)
   {
       result = await SignInManager.PasswordSignInAsync(model.Username, model.Password, model.RememberMe, false);
   }
   else
   {
       var user = await UserManager.FindByEmailAsync(model.Username);
       if (user != null)
           result = await SignInManager.PasswordSignInAsync(user.UserName, model.Password, model.RememberMe, false);
   }

IsValidEmailAddressは、プロパティ装飾[EmailAddress]検証属性のカスタマイズされたバリアントであり、TLDに長さチェックを課さず、x @ x.cのような電子メールアドレスを許可するため、組み込みの属性は使用しませんでした。

public static bool IsValidEmailAddress(string email)
    {
        if (string.IsNullOrEmpty(email))
            return false;

        var pattern = GlobalConstants.EMAIL_VALIDATION_PATTERN;
        const RegexOptions options = RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture;

        var emailValidator = new Regex(pattern,options);

        return emailValidator.IsMatch(email);
    }

正規表現パターン:

public const string EMAIL_VALIDATION_PATTERN = @"^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))){2,63}\.?$";
3
user1094436