asp.net-core - 如何使用 ASP.NET Core 2.2 创建用户
问题描述
下面的控制器应该在本地 SQL Server 数据库中创建一个用户,但是刷新dbo.AspNetUsers
表时,没有找到用户。我在这里想念什么?
用户控制器.cs
using System.Threading.Tasks;
using backend.Models;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
namespace backend.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
public class UserController : Controller
{
private readonly UserManager<AppUser> userManager;
public UserController(UserManager<AppUser> usrMgr)
{
userManager = usrMgr;
}
[HttpPost]
public async Task<IActionResult> Register([FromBody]CreateUserModel model)
{
AppUser user = new AppUser
{
UserName = model.Email,
Email = model.Email
};
var result = await userManager.CreateAsync(user, model.Password);
return CreatedAtAction(nameof(Register), user);
}
}
}
邮递员返回以下201 Created
正文:
{
"id": "random string of characters here",
"userName": "user@example.com",
"normalizedUserName": null,
"email": "user@example.com",
"normalizedEmail": null,
"emailConfirmed": false,
"passwordHash": null,
"securityStamp": null,
"concurrencyStamp": ""random string of characters here",
"phoneNumber": null,
"phoneNumberConfirmed": false,
"twoFactorEnabled": false,
"lockoutEnd": null,
"lockoutEnabled": false,
"accessFailedCount": 0
}
解决方案
使用 by 的答案后Volodymyr Bilyachat
,传递给 Postman 的失败result
对象显示我使用的测试密码太弱。然后我知道将以下密码设置添加到 Startup.cs,并选择一个有效的密码。
services.Configure<IdentityOptions>(options =>
{
// Password settings.
options.Password.RequireDigit = true;
options.Password.RequireLowercase = true;
options.Password.RequireNonAlphanumeric = true;
options.Password.RequireUppercase = true;
options.Password.RequiredLength = 6;
options.Password.RequiredUniqueChars = 1;
// Lockout settings.
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
options.Lockout.MaxFailedAccessAttempts = 5;
options.Lockout.AllowedForNewUsers = true;
// User settings.
options.User.AllowedUserNameCharacters =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
options.User.RequireUniqueEmail = false;
});
解决方案
你需要检查结果
var result = await userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
return CreatedAtAction(nameof(Register), user);
}
// handle bad request
所以结果可能包含错误代码。
推荐阅读
- amazon-web-services - 无法从 Lambda 函数访问 AWS DynamoDb
- c# - 为什么 ASP.NET Core 不并行处理我的请求?
- recursion - 在 Prolog 中检查家谱的后代
- javascript - 单击链接时如何将文本作为参数附加到 url?
- typescript - ES6 typescript 将所有导出的常量导入为数组
- python - Pandas - 如何获取数据帧中多列的行总和
- python - 使用 Python 中的单行 for 循环将数字转换为数字数组
- scala - Scala中用户定义对象的类型
- chart.js - Chart.js v2:如何让工具提示总是出现在折线图上?
- opencv - 如何从还有其他矩形对象的图像中提取手机屏幕?