我正在尝试在AspNet.Identity中为MVC5实现基于电子邮件地址的用户名,但我遇到了UserManager找到我的用户的问题。
public UserManager<ApplicationUser> UserManager { get; private set; }
public AccountController(UserManager<ApplicationUser> userManager)
{
UserManager = userManager;
UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager)
{
AllowOnlyAlphanumericUserNames = false
};
}
在我的登录帖子方法中:
var user = await UserManager.FindAsync(model.UserName, model.Password);
用户为空。
我使用错误的方法通过用户名和密码查找我的用户吗?
即使我使用
var db = new ApplicationDBContext();
var user = db.Users.Find(model.UserName);
或
var db = new ApplicationDBContext();
var user = db.Users.FirstOrDefault(u => u.UserName == model.UserName);
我得到一个空
更新
看起来我变空了,因为我试图播种的用户没有播种。谁知道为什么?
这是我在Configuration.cs(迁移)中的用户的种子:
var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
var users = new List<ApplicationUser>()
{
new ApplicationUser { UserName = "batman@email.com", IsActive = true },
new ApplicationUser { UserName = "superman@email.com", IsActive = true },
new ApplicationUser { UserName = "wonderwoman@email.com", IsActive = false }
};
users.ForEach(i => manager.Create(i, "password"));
如果我使用非电子邮件UserNames为用户播种,则播种没有问题:
new ApplicationUser { UserName = "batman", IsActive = true },
new ApplicationUser { UserName = "superman", IsActive = true },
new ApplicationUser { UserName = "wonderwoman", IsActive = false }
答案 0 :(得分:1)
知道了。我需要更改种子中的验证器:
var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
manager.UserValidator = new UserValidator<ApplicationUser>(manager)
{
AllowOnlyAlphanumericUserNames = false
};
var users = new List<ApplicationUser>()
{
new ApplicationUser { UserName = "batman@email.com", IsActive = true },
new ApplicationUser { UserName = "superman@email.com", IsActive = true },
new ApplicationUser { UserName = "wonderwoman@email.com", IsActive = false }
};
users.ForEach(i => manager.Create(i, "December 2013"));
在此之后,我能够播放基于电子邮件的UserNames。
我将此保留在我的AccountController中以添加用户:
public AccountController(UserManager<ApplicationUser> userManager)
{
UserManager = userManager;
UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager)
{
AllowOnlyAlphanumericUserNames = false
};
}
答案 1 :(得分:0)
确认您已添加数据库初始化策略或执行手动更新。
e.g。 [数据库初始化策略]
Database.SetInitializer<ApplicationDbContext>(new System.Data.Entity.MigrateDatabaseToLatestVersion<ApplicationDbContext, Configuration>());