MVC5 Identity 2中的SignInManager.PasswordSignInAsync使用用户名进行登录。
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
但是我的用户名和电子邮件不同。我想用电子邮件地址登录。那我该怎么做呢?谢谢。
MVC5 Identity 2中的SignInManager.PasswordSignInAsync使用用户名进行登录。
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
但是我的用户名和电子邮件不同。我想用电子邮件地址登录。那我该怎么做呢?谢谢。
通过电子邮件从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一样使用它,但是使用用户的电子邮件而不是用户名。
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}\.?$";