在本章中,无涯教程将讨论如何创建用户,为此,需要与Identity框架进行交互,以确保用户有效,然后创建该用户,然后继续并登录。
身份框架有两个核心服务,一个是 UserManager ,另一个是 SignInManager 。
需要将这两项服务都注入到控制器中,这样,就可以在需要创建用户或登录用户时调用适当的API。
为SignInManager和UserManager添加私有变量,然后在您的AccountController中添加构造函数,该构造函数将使用User类型的两个参数UserManager和User类型的SignInManager。
private SignInManager<User> _signManager; private UserManager<User> _userManager; public AccountController(UserManager<User> userManager, SignInManager<User> signManager){ _userManager = userManager; _signManager = signManager; }
将继续使用AccountController的POST操作方法,并且应始终在post动作内进行的首批检查之一是检查ModelState是否有效。
如果ModelState有效,那么知道用户为提供了用户名和密码并确认了密码;如果没有,需要请他们提供正确的信息。
这是Register操作的实现。
[HttpPost] public async Task<IActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var user = new User { UserName = model.Username }; var result = await _userManager.CreateAsync(user, model.Password); if (result.Succeeded) { await _signManager.SignInAsync(user, false); return RedirectToAction("Index", "Home"); } else { foreach (var error in result.Errors) { ModelState.AddModelError("", error.描述); } } } return View(); }
保存所有文件并运行应用程序,然后转到/account/register 。
输入一个用户名和一个非常简单的5个字符的密码。
现在,单击注册按钮。
默认情况下,身份框架会尝试强制执行一些有关密码的规则。
密码必须至少包含6个字符,一个字符必须小写,一个字符必须大写,并且必须有一个非数字字符。
这些错误出现在这里的原因是因为在页面上有一个验证摘要,该摘要总结了从 userManager.CreateAsync 输出返回的错误。
现在,对密码规则有了更多的了解,尝试创建一个足够复杂的密码,然后单击"Register"。
您现在将看到主页。这意味着该操作有效。现在转到SQL Server Objext Explorer。
右键单击 dbo.AspNetUsers 表,然后选择查看数据。
现在,您可以看到该用户已成功创建,并且还可以在Users表中看到一条新记录,您还可以看到哈希密码值和用户名,这是无涯教程在 mark.upston 中注册的用户名。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)