在 ASP.NET Identity 中将电子邮件设置为用户名

Set email as username in ASP.NET Identity

我正在使用具有 ASP.NET 身份的 ASP.NET 核心 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 接受用户名作为参数而不是电子邮件...但是如何使用电子邮件作为用户名?

我是否需要在每次需要验证时都进行额外的调用来获取用户?

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,它通过电子邮件查找用户,就好像它是用户名一样