种子MVC5实体框架6中的登录尝试无效

时间:2015-12-27 18:20:09

标签: asp.net-mvc entity-framework

我使用MVC5。实体框架6代码第一种方法

我根据static resource

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());
                }
            }

2 个答案:

答案 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);

希望我回答你的问题。