【问题标题】:Asp.Net Core Identity Create UserAsp.Net Core Identity 创建用户
【发布时间】:2021-05-16 13:31:47
【问题描述】:

我无法创建用户。进程正常运行,向用户读取数据,重定向到主页/索引,但数据库中没有新用户。 我在 DbSeeder 中有相同的代码,并且在那里正确创建了用户。

[HttpPost]
        public async Task<IActionResult> Create(WorkerVM model)
        {
            if (ModelState.IsValid)
            {
                var user = await _userManager.FindByNameAsync(model.Username);

                if (user == null)
                {
                    user = new User()
                    {
                        FirstName = model.FirstName,
                        LastName = model.LastName,
                        Email = model.Username,
                        UserName = model.Username
                    };

                    var result = await _userManager.CreateAsync(user, model.Password);
                    if (result.Succeeded)
                    {
                        await _userManager.AddToRoleAsync(user, "Worker");
                    }
                    return RedirectToAction("Index", "Home");
                }
            }
            
            ModelState.AddModelError("", "Registration Failed");

            return View();
        }

【问题讨论】:

  • ReturnRedirectToAction 应该在 if (result.Succeeded) 语句中。在 if 语句之外,如果用户创建不成功,您将返回视图以留在页面上。在您的操作方法上放置一个调试器以查看问题所在
  • 您的创建代码似乎是正确的,因为@Qudus 提到重定向应该在结果成功内完成,否则您应该返回Page()

标签: entity-framework asp.net-core .net-core entity-framework-core asp.net-identity


【解决方案1】:

未在 db 中创建用户的最可能原因是新密码不符合密码条件。

检查密码标准并修复密码。还通过将“}”移动到第一个返回运算符后面来修复您的代码:

 var result = await _userManager.CreateAsync(user, model.Password);
   if (result.Succeeded)
    {
     await _userManager.AddToRoleAsync(user, "Worker");
      return RedirectToAction("Index", "Home");
    }

您可以管理您的密码条件,将此代码添加到启动

services.Configure<IdentityOptions>(x => {
x.Password.RequireDigit = false;
x.Password.RequiredLength = 2;
x.Password.RequireUppercase = false;
x.Password.RequireLowercase = false;
x.Password.RequireNonAlphanumeric = false;
x.Password.RequiredUniqueChars = 0;
x.Lockout.AllowedForNewUsers = true;
x.Lockout.MaxFailedAccessAttempts = 5;
x.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromSeconds(30);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-09
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 2021-01-10
    • 2018-10-25
    • 2016-12-09
    相关资源
    最近更新 更多