首页 > 解决方案 > 如何使用 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;
            });

标签: asp.net-core

解决方案


你需要检查结果

var result = await userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
    return CreatedAtAction(nameof(Register), user);
}
// handle bad request

所以结果可能包含错误代码。


推荐阅读