虽然用户注册的数据成功提交了,但是并没有创建用户,来看看问题出在哪。
看看Register的POST方法代码:
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await userManager.CreateAsync(user, model.Password);
return RedirectToLocal(returnUrl);
}
return View(model);
其中加粗的这行就是调用UserManager创建用户的异步方法,这个方法的返回值包含了创建是否成功,以及未成功时的错误信息。把代码修改一下,看看result给我们带来了什么。
var result = await userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
return RedirectToLocal(returnUrl);
}
foreach (IdentityError error in result.Errors)
{
ModelState.AddModelError(string.Empty, error.Description);
}
result的属性Succeeded表示用户创建是否成功,程序现在判断用户创建成功后才重定向到指定的网页,否则遍历result的Errors属性,这个属性中包含了所有验证错误,将这些错误添加到模型验证错误中并返回客户端。
重新运行程序,输入用户名和密码,密码仍然输入123,提交后页面上出现以下验证错误:

这是标识框架默认的密码验证规则,包括:密码长度至少为6;密码至少有一个非字母数字的字符;密码至少有一个大写和小写字符。至于怎么用中文显示这些验证信息,后面再说。
这些验证规则可以通过配置标识选项来修改。同样在Startup类的ConfigureServices方法中添加以下代码:
services.Configure<IdentityOptions>(options =>
{
options.Password.RequiredLength = 3;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireLowercase = false;
options.Password.RequireUppercase = false;
});
这里我把密码最小长度改为3,不需要大小写字母,不需要特殊符号,嗯,现在可以输入123做为密码了。
好了,再次创建用户后,查看数据库,AspNetUsers表中已经插入了用户数据。
网友评论