Я довольно новичок в использовании 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");
}
Однако при отправке пустого входа Форма, я в конечном итоге с этим:
Если проверка не пройдена, почему запрос на вход в систему все еще подается?
Do Я также должен проверить в UserController, или я что-то не так делаю правильно?