Как создать пользователя с ASP.NET Core 2.2 - PullRequest
1 голос
/ 14 мая 2019

Следующий контроллер должен создать пользователя в локальной базе данных SQL Server, но при обновлении таблицы dbo.AspNetUsers пользователи не найдены. Что мне здесь не хватает?

UserController.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
}

Решение

После использования ответа Volodymyr Bilyachat переданный Почтальону ошибочный объект 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;
            });

1 Ответ

1 голос
/ 14 мая 2019

Вам нужно проверить результат

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

, поэтому результат может содержать код ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...