اضافه کردن کپچا (Add Captcha)
تنظیمات کپچا در get و set با سریالایز و دی سریالایز انجام میشود. نکته مهم اینه با تنظیم کپچا در متد Get باید در متد Post نیز جدا از چک کردن کپچا با captcha.IsValid ، باید در شروط دیگر نیز بعد هر بار نقض شدن یک کپچا جدید ساخته و loginViewModel.ImageData = captcha.ImageData شود تا با هر خطا کپچای جدید ساخته شود . و اگر در شرطی این عملیات نباشد عکس بعد از زدن دکمه ورود و نمایش خطا ، دیگر نمایش داده نمیشود.
پیشنیازها و وابستگیها (Dependencies)
https://www.aspsnippets.com/DownloadFile?File=ASPSnippets.Core.Captcha.dll// ...Controller.cs
namespace ...
{
public class ...: Controller
{
public Captcha captcha
{
get
{
return JsonConvert.DeserializeObject<Captcha>(TempData["Captcha"].ToString());
}
set
{
TempData["Captcha"] = JsonConvert.SerializeObject(value);
}
}
...
[HttpGet("Login")]
public IActionResult Login(string ReturnUrl="/")
{
captcha = new Captcha(180, 40, 20f, "#FFFFFF", "#61028D", Mode.AlphaNumeric);
ViewBag.ReturnUrl = ReturnUrl;
return View(new LoginViewModel()
{
ImageData = captcha.ImageData
});
}
[HttpPost("Login"), ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel loginViewModel)
{
if (!ModelState.IsValid)
{
captcha = new Captcha(180, 40, 20f, "#FFFFFF", "#61028D", Mode.AlphaNumeric);
loginViewModel.ImageData = captcha.ImageData;
return View(loginViewModel);
}
if (!captcha.IsValid(loginViewModel.CaptchaAnswer))
{
captcha = new Captcha(180, 40, 20f, "#FFFFFF", "#61028D", Mode.AlphaNumeric);
ModelState.AddModelError("CaptchaAnswer","عبارت امنیتی صحیح نمیباشد.");
loginViewModel.ImageData = captcha.ImageData;
return View(loginViewModel);
}
...
}
}
// ViewModel.cs
public class LoginViewModel
{
...
public string? ImageData { get; set; }
[DisplayName("عبارت امنیتی")]
[Required(ErrorMessage = "لطفا {0} وارد کنید")]
public string CaptchaAnswer { get; set; }
}
// View.cshtml
@{
TempData.Keep("Captcha");
}
<div class="form-element-row mb-1">
<div class="d-flex align-items-center gap-2 mb-1">
<div class="col-5 mt-2">
<input type="text" asp-for="CaptchaAnswer" class="form-control" placeholder="عبارت امنیتی">
</div>
<div class="ms-auto ">
<img src="@Model.ImageData" />
</div>
</div>
<span asp-validation-for="CaptchaAnswer" class="text-danger m-1"></span>
</div>
نکات کلیدی و ترفندها (Tips & Notes)
باید فایل ASPSnippets.Core.Captcha.dll در مسیر Dependencies => Add Shared Project References => Add به پروژه وب اضافه کنیم