MVC yapısı kullanarak oluşturmuş olduğunuz bir web uygulamasında iletişim formu ya da çeşitli formlar bulunuyor olabilir. Bu formlara reCaptcha eklemediğiniz taktirde bot veya kötü niyetli kullanıcılar tarafından formunuz gereksiz yere çok kullanılmaktadır. Bu durum boşuna sunucularınızı yoracaktır. Bu sebepten dolayı kullanıcının robot mu insan mı olduğunu anlamak için reCaptcha kullanımı ben her ne kadar sinir olsam da şimdilik en geçerli yöntemdir. MVC reCaptcha kullanımı işinize yarayacaktır bu sebepten dolayı bu yazıda nasıl yapacağımıza bakalım.
MVC reCaptcha Kullanım Adımları
İlk olarak Google reCaptcha web sitesini ziyaret edelim ve Google üyeliğimiz ile web sitede oturum açalım. Ardından karşımıza çıkan formu doldurarak reCaptcha kullanmak istediğimiz web siteyi ekleyelim.
Burada dikkat etmeniz gereken olay reCAPTCHA s2 seçip “Robot değilim” Onay Kutusu demeniz gerekmektedir. Eğer bu şekilde yapmazsanız Site sahibinin görmesi gereken HATA: Geçersiz anahtar türü reCAPTCHA hatası alırsınız.
Kayıt işlemi tamamlandığında sistem size site anahtarı ve gizli anahtar olmak üzere 2 adet anahtar vermektedir. Bu anahtarları bir yere not edin.
<script src='https://www.google.com/recaptcha/api.js'></script>
Yukarıdaki kodu MVC projenizin paylaşılan tasarım (shared layout) kodları içerisinde </head> etiketinden önceye gelecek şekilde ekleyin.
<div class="g-recaptcha" data-sitekey="KEY"></div>
Yukarıdaki kodu da formun son kısmına (captchayı göstermek istediğiniz yere) eklemeniz gerekmektedir. Bu ekleme işlemi sırasında KEY yazılı yere kendi anahtarınızı koymanız gerekmektedir.
Formun bulunduğu viewın bağlı olduğu controllera şu şekilde bir sınıf ekleyelim:
public class CaptchaResult
{
[JsonProperty("success")]
public bool Success { get; set; }
[JsonProperty("error-codes")]
public List<string> ErrorCodes { get; set; }
}
Controller içerisinde formdan gelen sonuca göre işlem yaparken captcha sonucunu artık kontrol edeceğiz:
var captcha = Request.Form["g-recaptcha-response"];
const string secret = "GİZLİ ANAHTAR";
var restUrl = string.Format("https://www.google.com/recaptcha/api/siteverify?secret={0}&response={1}", secret, captcha);
WebRequest req = WebRequest.Create(restUrl);
HttpWebResponse resp = req.GetResponse() as HttpWebResponse;
JsonSerializer serializer = new JsonSerializer();
CaptchaResult result = null;
using (var reader = new StreamReader(resp.GetResponseStream()))
{
string resultObject = reader.ReadToEnd();
result = JsonConvert.DeserializeObject<CaptchaResult>(resultObject);
}
if (result.Success)
{
Localhost, bu site anahtarı için desteklenen alanlar listesinde yok. hatası alıyorsanız bilin ki doğru yoldasınız. reCaptcha oluştururken alan adı listesine alan adımızı ekledik ancak localhostu eklemedik bu sebepten dolayı localhostta reCaptcha çalışmayacaktır. Projeyi derleyip yayımladığınız zaman proje çalışacaktır.
Çocukluğumdan beri arabalara olan ilgim babam sayesinde başlamıştır. Araba manyağı seviyesinde bir ilgim var ancak bunu her ortamda dile getirmem. Teknolojiye ve bilgisayara olan ilgim kendimi tanımaya başladım başlayalı oldu. Şimdi ise kendimce kod yazabilen bir bilgisayar mühendisi olarak çalışıyorum.