我使用MVC5。实体框架6代码第一种方法
将ApplicationUser
重命名为User
当我在种子方法中创建用户时,如下所示,数据库中的所有内容都很好,密码看起来是加密的。但是当我尝试登录我的系统时,我得Invalid login attempt
,如果我直接创建另一个用户它工作并登录没有任何问题
密码已加密,并且在PM控制台
Update-Database
后没有错误
string ADMIN_EMAIL= "xxxxxx@xxxx.xxx";
string PASSWORD = "xxxxxx";
if (!context.Users.Any())
{
var roleStore = new RoleStore<IdentityRole>(context);
var roleManager = new RoleManager<IdentityRole>(roleStore);
var userStore = new UserStore<User>(context);
var userManager = new UserManager<User>(userStore);
// Add User
var currentUser = userManager.FindByEmail(ADMIN_EMAIL);
if (currentUser == null)
{
currentUser = new User()
{
Email = ADMIN_EMAIL,
PhoneNumber = "0123456789",
UserName = "abdallah",
LockoutEnabled = true,
EmailConfirmed = true,
PhoneNumberConfirmed = true,
SecurityStamp = Guid.NewGuid().ToString("D")
};
IdentityResult result = userManager.Create(currentUser, PASSWORD);
if (result.Succeeded == false)
{
throw new Exception(result.Errors.First());
}
}
答案 0 :(得分:3)
我找到了答案
我得到了Invalid login attempt
,因为字段UserName
不等于Email
字段。我只是UserName
值= Email
currentUser = new User()
{
Email = ADMIN_EMAIL,
UserName = ADMIN_EMAIL,
PhoneNumber = "0123456789",
LockoutEnabled = true,
EmailConfirmed = true,
PhoneNumberConfirmed = true,
SecurityStamp = Guid.NewGuid().ToString("D")
};
我不知道如何将用户名更改为可读名称,如果有人知道如何更改用户名请在此处发表评论
答案 1 :(得分:2)
我在 RegisterViewModel 和 RegisterView 中添加了 UserName 字段。这样用户就可以输入他的姓名。然后在 AccountController 的注册功能中,我将 UserName = model.Email 更改为 UserName = model.UserName
它似乎工作了一段时间,因为我在菜单上获得UserName并且我已成功登录。但是,当我退出时,我无法重新登录。我尝试了很多东西,但似乎没有任何东西工作
过了一会儿,我发现了 AccountController 中登录功能中出现的问题。问题出在这里:
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
虽然它将电子邮件发送到 PasswordSignInAsync ,但它不是必需的值。 PasswordSignInAsync 期待 UserName ,因此我们不会使用此电子邮件,因为我们更改了用户名。
幸运的是,还有另一种可用的功能,需要 ApplicationUser用户 字符串UserName 的实例。所以,我做了以下工作,它再次运作:
var user = _context.Users.Where(u => u.Email == model.Email).First();
var result = await _signInManager.PasswordSignInAsync(user, model.Password, model.RememberMe, lockoutOnFailure: false);
希望我回答你的问题。