Microsoft.AspNetCore.Identity.IdentityError при попытке регистрации - PullRequest
0 голосов
/ 22 января 2019

Я внедряю простую систему аутентификации с ASP.NET Core Identity, используя только имя пользователя и пароль.Когда я вызываю действие «Регистрация», я получаю сообщение об ошибке, указанное в заголовке.

Фактическая ошибка

Ниже кода, связанного с регистрацией.

Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
   services.AddDbContext<AppDbContext>(options => 
   options.UseSqlServer(_configuration.GetConnectionString("Default")));
   services.AddIdentity<IdentityUser, 
   IdentityRole().AddEntityFrameworkStores<AppDbContext>();`

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseAuthentication();
}

AccountController.cs:

public class AccountController : Controller
{
    private readonly UserManager<IdentityUser> _userManager;
    private readonly SignInManager<IdentityUser> _signInManager;

    public AccountController(UserManager<IdentityUser> userManager, 
    SignInManager<IdentityUser> signInManager)
    {
        _userManager = userManager;
        _signInManager = signInManager;
    }
    public IActionResult Register()
    {
        return View();
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    [AllowAnonymous]
    public async Task<IActionResult> Register(RegistrationViewModel registrationViewModel)
    {
        if (ModelState.IsValid)
        {
            var user = new IdentityUser {UserName = registrationViewModel.UserName};
            var result = await _userManager.CreateAsync(user, registrationViewModel.Password);

            if (result.Succeeded)
                return RedirectToAction("Index", "Home");
            var errors = result.Errors;
            var message = string.Join(", ", errors);
            ModelState.AddModelError("", message);
        }

        return View(registrationViewModel);
    }

RegistrationViewModel.cs:

public class RegistrationViewModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.Password)]
    public string Password { get; set; }
}

Registerm.cshtml:

@model RegistrationViewModel

<form asp-controller="Account" asp-action="Register" method="post" class="form-horizontal" role="form">

<div asp-validation-summary="All" class="text-danger"></div>

<div class="form-group">
    <label asp-for="UserName" class="col-md-2 control-label"></label>
    <div class="col-md-10">
        <input asp-for="UserName" class="form-control" />
        <span asp-validation-for="UserName" class="text-danger"></span>
    </div>
</div>
<div class="form-group">
    <label asp-for="Password" class="col-md-2 control-label"></label>
    <div class="col-md-10">
        <input asp-for="Password" class="form-control" />
        <span asp-validation-for="Password" class="text-danger"></span>
    </div>
</div>
<div class="form-group">
    <div class="col-md-offset-2 col-md-10">
        <input type="submit" class="btn btn-primary" value="Register" />
    </div>
</div>

`

Насколько я знаю, такая ошибка возникает, когда логин уже связан с учетной записью, однако таблица, в которой предполагается хранить все данные пользователей, пуста.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

попробуйте отредактировать ваши службы в StartUp следующим образом

        services.AddIdentity<IdentityUser, IdentityRole>()
            .AddEntityFrameworkStores<AppDbContext>();

также закройте скобку для метода Configure Services

0 голосов
/ 22 января 2019

Попробуйте использовать это, чтобы получить лучшее сообщение об ошибке.Ваш toString on Errors просто возвращает тип объектов, а не то, что в нем.

var message = string.Join (",", response.Errors.Select (x => "Код" + x.Code + "Описание "+ x. Описание));

...