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

时间:2016-03-17 11:34:27

标签: asp.net-core asp.net-core-mvc asp.net-core-1.0

我正在使用带有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接受用户名作为参数而不是电子邮件......但是如何使用电子邮件作为用户名?

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

1 个答案:

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