Reputation: 127
I'm implementing a simple authentication system with ASP.NET Core Identity using only username and password. When I call Register action, I get the error mentioned in the title.
Below the code which is associated with registration.
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>
`
As far as I know, such error occurs when the login is already associated with account, however, the table which is supposed to store all the users' data is empty.
Upvotes: 3
Views: 3433
Reputation: 2221
Try using this to get a better error message. Your toString on Errors is just returning the objects type not whats in it.
var message = string.Join(", ", response.Errors.Select(x => "Code " + x.Code + " Description" + x.Description));
Upvotes: 4
Reputation: 144
try editing your services in StartUp as follows
services.AddIdentity<IdentityUser, IdentityRole>()
.AddEntityFrameworkStores<AppDbContext>();
also, close the bracket for Configure Services method
Upvotes: 0