Запрос на вход в систему все еще выполняется, даже если проверка не пройдена - PullRequest
1 голос
/ 26 февраля 2020

Я довольно новичок в использовании ASP, так как большая часть моего опыта веб-разработки основана на устаревшей методологии.

В любом случае, я использую FluentValidation для проверки записей формы.

LoginViewModel.cs

public class LoginViewModel
{
    public string Username { get; set; }
    public string Password { get; set; }
}

LoginValidator.cs

public class LoginValidator : AbstractValidator<LoginViewModel>
{
    public LoginValidator()
    {
        RuleFor(x => x.Username).NotEmpty().WithMessage("Username cannot be empty.");
        RuleFor(x => x.Password).NotEmpty().WithMessage("Password cannot be empty.");
    }
}

И я ' я запускаю это в ConfigureServices:

//Validators
services.AddSingleton<IValidator<LoginViewModel>, LoginValidator>();
//FluentValidation
services.AddControllersWithViews().AddFluentValidation(fv =>
{
     fv.RunDefaultMvcValidationAfterFluentValidationExecutes = false;
});

И вот как я обрабатываю запрос на вход в мой UserController.cs:

[HttpPost]
public async Task<IActionResult> Login(LoginViewModel login)
{
    var user = Database.Users.FirstOrDefault(x => x.Username == login.Username && x.Password == login.Password);
    if (user == null)
    {
        ModelState.AddModelError("Login", "Invalid username/password combination.");
        return View();
    }
    var identity = new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme, ClaimTypes.Name, ClaimTypes.Role);
    identity.AddClaim(new Claim(ClaimTypes.Name, user.Username));
    var principal = new ClaimsPrincipal(identity);
    await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal);
    return RedirectToAction("Login");
}

Однако при отправке пустого входа Форма, я в конечном итоге с этим:

enter image description here

Если проверка не пройдена, почему запрос на вход в систему все еще подается?

Do Я также должен проверить в UserController, или я что-то не так делаю правильно?

1 Ответ

0 голосов
/ 26 февраля 2020

Ах, неважно. Я понял, что использование ModelState.IsValid работает, что избавляет меня от необходимости вручную проверять модель перед отправкой запроса на вход в систему.

...