Error 400 on login with ASP.NET Core Identity

896 Views Asked by At

I have an application that has been running for 4 years with Microsoft.AspNetCore.Identity and .NET Core 2.2 . I have a modification to make and I have taken out the old file .ZIP. I had done this project in time with VS 2017. Now I'm with VS 2022.

<div class="container">
    <section class="login_section">
        <div class="img-responsive">
            <img src="~/images/Logo.PNG" class="img-fluid" />
        </div>
        <form id="account" method="post">
            <div asp-validation-summary="All" class="text-danger"></div>
            <div class="form-group">
                <input asp-for="Input.Email" class="form-control" placeholder="Courriel" />
                <span asp-validation-for="Input.Email" class="text-danger"></span>
            </div>
            <div class="form-group">
                <input asp-for="Input.Password" class="form-control" placeholder="Mot de passe" />
                <span asp-validation-for="Input.Password" class="text-danger"></span>
            </div>             
            <div class="form-group">
                <button type="submit" class="btn btn-primary">Connexion</button>
            </div>
        </form>

    </section>
</div>
@section Scripts {
    <partial name="_ValidationScriptsPartial" />
}



[AllowAnonymous]
public class LoginModel : PageModel
{
    private readonly SignInManager<ApplicationUser> _signInManager;
    private readonly ILogger<LoginModel> _logger;

    public LoginModel(SignInManager<ApplicationUser> signInManager, ILogger<LoginModel> logger)
    {
        _signInManager = signInManager;
        _logger = logger;
    }

    [BindProperty]
    public InputModel Input { get; set; }

    public IList<AuthenticationScheme> ExternalLogins { get; set; }

    public string ReturnUrl { get; set; }

    [TempData]
    public string ErrorMessage { get; set; }

    public class InputModel
    {
        [Required]
        [EmailAddress]
        [Display(Name = "Courriel")]
        public string Email { get; set; }

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

        [Display(Name = "Remember me?")]
        public bool RememberMe { get; set; }
    }

    public async Task OnGetAsync(string returnUrl = null)
    {
        if (!string.IsNullOrEmpty(ErrorMessage))
        {
            ModelState.AddModelError(string.Empty, ErrorMessage);
        }

        returnUrl = returnUrl ?? Url.Content("~/");

        // Clear the existing external cookie to ensure a clean login process
        await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme);

        ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();

        ReturnUrl = returnUrl;
    }

    public async Task<IActionResult> OnPostAsync(string returnUrl = null)
    {
        returnUrl = returnUrl ?? Url.Content("~/");

        if (ModelState.IsValid)
        {
            var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);

            if (result.Succeeded)
            {
                var user = await _signInManager.UserManager.FindByEmailAsync(Input.Email);
                var roles = await _signInManager.UserManager.GetRolesAsync(user);
                return LocalRedirect(returnUrl);
            }               

            if (result.IsLockedOut)
            {
                _logger.LogWarning("User account locked out.");
                return RedirectToPage("./Lockout");
            }
            else
            {
                ModelState.AddModelError(string.Empty, "Invalid login attempt.");
                return Page();
            }
        }

        // If we got this far, something failed, redisplay form
        return Page();
    }
}

When I launch the program, I get an error: HTTP ERROR 400

Yet this program has been operating for several years.

I can't put my finger on the bobo. I know it's still in NET Core 2.2, but I'd like to make it work before I migrate it. Anyone have any idea what's going on?

1

There are 1 best solutions below

2
yogihosting On

You are now switching to DOT NET 6 version on Visual Studio 22. Identity has changed over the time. You need to set up identity once again. In .NET 6 there is Program.cs class only and not Startup.cs so you probably have to configure all the settings in Program.cs class.

Kindly check How to Setup and Configure ASP.NET Core Identity which will help you in this.