دسته بندی ها
12:40 1399/06/02

نحوه استفاده از google recaptcha در Asp.net Core

مشخصات سوال کننده :
کاربر : fafa     امتیاز کاربر : 0     رتبه کاربر : 7020
دسته بندی : Asp.net Core

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 4337
پاسخ دهنده : fateme 15:39 1399/06/02

خطایی که شمادارید احتمالا به این خاطر هست که siteKey رو داخل سایت قرار ندادید. برای استفاده از google recaptcha باید یک رشته که بهش sitekey میگن رو توی سایت قرار بدید تا از طریق اون گوگل بتونه سایت شما رو برای جلوگیری از ورود ربات های مزاحم شناسایی کنه.

 

آموزش استفاده از Google Recaptcha در Asp.net Core

جهت استفاده از قابلیت google recaptcha ابتدا باید سایت خودتون رو به گوگل معرفی کنید تا یک SiteKey یا Secrect Key به شما بده تا از طریق اون گوگل بتونه سایت شما رو شناسایی کنه.

خب بعد از اینکه سایت خودتون رو معرفی کردید چند روش برای اعتبارسنجی و صحت داده های ورودی شما به شما پیشنهاد میشه. یکی از این روش ها این هست که یک رشته به شما میده و شما باید از این رشته در سایت خودتون استفاده کنید.

بعد از اینکه این رشته رو دریافت کردید می تونید از گوگل ریکپچا استفاده کنید.

 

نحوه استفاده از Google Recaptcha

برای استفاده ار کپچای گوگل در صفحه مثلا فرم لاگین ابتدا باید یک ViewModel رو ایجاد کنید :

 

 public class LoginViewModel
 {
     [Display(Name = "نام کاربری")]
     public string UserName { get; set; }

     [Display(Name = "رمز عبور")]
     public string Password{ get; set; }

     [Display(Name = "کد امنیتی")]
     public string CaptchaCode { get; set; }
 }

 

خب همونطوری که میبینید در این ویومدل یک فیلد هم به نام کدامنیتی قرار داده شده. حالا از این ViewModel میشه در View استفاده کرد.

 

@model porseman.Models.ViewModel.LoginViewModel

<style>
    .g-recaptcha {
        display: inline-block;
        width: 100px;
    }
</style>

<form>

        <!--UserName-->
        <div class="form-group">
            <label asp-for="UserName"></label>
            <input asp-for="UserName" type="text" class="form-control" />
        </div>

        <!--Password-->
        <div class="form-group">
            <label asp-for="Password"></label>
            <input asp-for="Password" type="password" class="form-control" />
        </div>

        <!--captcha-->
        <div class="form-group">
            <label class="form-control-label">تصویر امنیتی</label>
             <div class="g-recaptcha" data-sitekey="AAANq9LHOPrwR1tIa-PNdkzGGodHwf">
            </div>
        </div>

        <!--btn-->
        <div class="form-group">
            <div>
                <button type="submit">
                    ورود
                </button >
        </div>


    </form>

 

خب در کدهای Html بالا فرم لاگین طراحی شده که گوگل ریکپچا به همراه کدی که از سایت گوگل با عنوان SecretKey دریافت شده هم وجود داره.

 

استفاده از google recaptcha

 

حالا باید در سمت کنترلر این کدامنیتی رو به سمت سایت گوگل بفرستیم و صحت اون رو بررسی کنیم.

 

       [HttpPost]
       [ValidateAntiForgeryToken]
        public IActionResult Login(LoginViewModel model)
        {
            string urlToPost = "https://www.google.com/recaptcha/api/siteverify";

            //Secret key خود را در این قسمت وارد کنید

            string secretKey = "AAAGxqwwgpqh4SI1sUFX2BAR_ddl_3"; // change this
            string gRecaptchaResponse = form["g-recaptcha-response"];

            var postData = "secret=" + secretKey + "&response=" + gRecaptchaResponse;

            // send post data
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlToPost);
            request.Method = "POST";
            request.ContentLength = postData.Length;
            request.ContentType = "application/x-www-form-urlencoded";

            using (var streamWriter = new StreamWriter(request.GetRequestStream()))
            {
                streamWriter.Write(postData);
            }

            // receive the response now
            string result = string.Empty;
            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            {
                using (var reader = new StreamReader(response.GetResponseStream()))
                {
                    result = reader.ReadToEnd();
                }
            }

            // validate the response from Google reCaptcha
            var captChaesponse = JsonConvert.DeserializeObject<reCaptchaResponse>(result);
            if (!captChaesponse.Success)
            {
                ModelState.AddModelError(string.Empty, "لطفا تصویر امنیتی را تایید کنید.");
                return View(model);
            }

          //Login Stetement
         }

 

 

در کدهای بالا که در سمت کنترلر نوشته شده قبل از انجام Login از صحت کدامنیتی اطمینان پیدا می کنیم و در این بین عملیات تشخیص انسان یا ربات رو گوگل برای ما انجام میده.

 

نحوه استفاده از google recaptcha در Asp.net core به این صورتی هست که براتون نوشتم و کدهاش رو هم کامل قرار دادم.

ویرایش شده در یکشنبه 9 مرداد 1401 ساعت 14:23:35
به این پاسخ امتیاز بدهید    ‎−1
امتیاز: 1617 رتبه: 2
پاسخ دهنده : fafa 11:27 1399/06/03

ممنونم از پاسخ شما بله متاسفانه در Sturtup به درستی Sitekey رو به درستی وارد نکرده بودم

باید به این شکل وارد میکردم 

services.AddRecaptcha(new RecaptchaOptions
  {
     SiteKey = "***************************************",
     SecretKey = "***************************************"});
ویرایش شده در دوشنبه 3 شهریور 1399 ساعت 13:13:29
به این پاسخ امتیاز بدهید    0
امتیاز: 0 رتبه: 7020
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود