Asp.net core 在ASP.NET标识中将电子邮件设置为用户名

Asp.net core 在ASP.NET标识中将电子邮件设置为用户名,asp.net-core,asp.net-core-mvc,asp.net-core-1.0,Asp.net Core,Asp.net Core Mvc,Asp.net Core 1.0,我正在使用ASP.NET Core RC1和ASP.NET标识,我有以下几点: User user = await _userManager.FindByEmailAsync("myname@mydomain.com"); SignInResult result = await _signInManager.PasswordSignInAsync(user, "mypassword", true, false); 这样做的结果是成功的。。。但如果我只是尝试: SignInResult res

我正在使用ASP.NET Core RC1和ASP.NET标识,我有以下几点:

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接受用户名作为参数,而不是电子邮件。。。但是如何使用电子邮件作为用户名呢

每次我需要对用户进行身份验证时,是否需要进行额外的调用以获取该用户?

PasswordSignInAsync一个接受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);
    }
公共虚拟异步任务密码SigninaSync(字符串用户名、字符串密码、,
bool Ispersist,bool LockoutOn故障)
{
var user=await UserManager.FindByNameAsync(用户名);
if(user==null)
{
返回信号结果失败;
}
return wait PasswordSignInAsync(用户、密码、ispersist、lockoutOnFailure);
}

唯一的其他方法是实现一个自定义的UserStore,它通过电子邮件查找用户,就像它是用户名一样

我首先通过电子邮件获得使用权只是为了测试,因为我不需要它。。。这就是为什么我想直接将PasswordSignInAsync与电子邮件一起使用,以避免对数据库进行额外调用。没有额外调用,因为还有一个使用用户名的调用