Asp.net mvc 5 为什么可以';我不能以种子用户身份登录吗?

Asp.net mvc 5 为什么可以';我不能以种子用户身份登录吗?,asp.net-mvc-5,asp.net-identity,Asp.net Mvc 5,Asp.net Identity,我正在开发一个新的ASP.NET MVC项目,使用数据库中存储的个人帐户进行身份验证。下面是我的类,它将在每次测试时为数据库添加样本数据: public class DevelopmentInitializer : DropCreateDatabaseAlways<ApplicationDbContext> { protected override void Seed(ApplicationDbContext context) { base.Seed(

我正在开发一个新的ASP.NET MVC项目,使用数据库中存储的个人帐户进行身份验证。下面是我的类,它将在每次测试时为数据库添加样本数据:

public class DevelopmentInitializer : DropCreateDatabaseAlways<ApplicationDbContext>
{
    protected override void Seed(ApplicationDbContext context)
    {
        base.Seed(context);

        var applicationUserManager = new ApplicationUserManager(new UserStore<ApplicationUser>(context));

        var sampleUserOne = new ApplicationUser { UserName = "SampleUser", Email = "sample@example.com" };
        var result = applicationUserManager.Create(sampleUserOne, "aaaaaa");

        if (!result.Succeeded) 
            throw new Exception();

        context.SaveChanges();
    }
}
问题的描述非常简单:尝试使用种子用户的凭据登录失败。

具体来说,
FindAsync
方法返回
null
,即使用户在数据库中-
findbyemailsync
确实找到了种子用户

但是,创建一个新帐户可以工作,并允许我登录

为什么我不能以种子用户身份登录,即使我可以注册一个新帐户并使用它登录?

我怀疑这与密码的散列方式有关,但我不知道如何确认这一点

我的账户错了吗?我是否应该在
Seed
方法中创建一个单独的
ApplicationUserManager
?如果没有,我应该如何获取一个以调用
创建
?我试图了解新系统是如何工作的,在我的帐户或用户在部署的应用程序中被锁定之前。

以下代码:

var user = await UserManager.FindAsync(model.Email, model.Password);
希望传入的是用户名,而不是电子邮件地址

这一简单的改变应该能解决以下问题:

var user = await UserManager.FindAsync(model.UserName, model.Password);

如果您看到PasswordSignInAsync的定义,它需要用户名字符串而不是电子邮件。登录请求电子邮件用户界面的原因可能是因为自动生成的代码,其中电子邮件将等于控制器中的用户名。

Create()方法不是异步的吗?如果是这样,则需要等待applicationUserManager.Create(…)调用。否,但
CreateAsync
是。然而,这并没有真正的区别。用户种子成功,提供的密码在尝试登录时总是错误的。为了验证这些愚蠢的事情。。。。1) 传递到
登录
操作中的
用户名
密码
是正确的,2)当您应该使用
用户名
时,您是否正在使用
电子邮件
?@BrendanGreen Umm。。。是的,你说得对。示例代码误导了我:
Find
FindAsync
应该是用户名,而不是电子邮件。想回答这个问题吗?很乐意帮忙。我补充了一个答案。
var user = await UserManager.FindAsync(model.UserName, model.Password);