我正在使用带有ASP.NET身份的ASP.NET Core RC1,我有以下内容:
User user = await _userManager.FindByEmailAsync("myname@mydomain.com");
SignInResult result = await _signInManager.PasswordSignInAsync(user, "mypassword", true, false);
有了这个,结果就是成功......但如果我只是尝试:
SignInResult result = await _signInManager.PasswordSignInAsync("myname@mydomain.com", "mypassword", true, false);
它失败了...我知道PasswordSignInAsync接受用户名作为参数而不是电子邮件......但是如何使用电子邮件作为用户名?
每次需要对用户进行身份验证时,是否需要进行额外调用以获取用户?
答案 0 :(得分:2)
PasswordSignInAsync has 2 overloads一个获取TUser,另一个获取用户名。
使用用户名只是调用带有TUSer的用户,因为您已经可以通过电子邮件获取用户为什么不直接传入用户?
这里是带有用户名的重载代码,你可以看到它只会在用户名查找用户后调用另一个用户
public virtual async Task<SignInResult> PasswordSignInAsync(string userName, string password,
bool isPersistent, bool lockoutOnFailure)
{
var user = await UserManager.FindByNameAsync(userName);
if (user == null)
{
return SignInResult.Failed;
}
return await PasswordSignInAsync(user, password, isPersistent, lockoutOnFailure);
}
唯一可行的方法是实现一个自定义UserStore,通过电子邮件查找用户,就好像它是用户名