Asp.net mvc 5 为什么可以';我不能以种子用户身份登录吗?
我正在开发一个新的ASP.NET MVC项目,使用数据库中存储的个人帐户进行身份验证。下面是我的类,它将在每次测试时为数据库添加样本数据: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(
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);