Logo for Parsclick
توجه: سایت برای مدت چند روز از تاریخ ۱۸ نوامبر از کار خواهد افتاد...

گوگل ریکپتچا ReCAPTCHA

  محمد محمودی محمد محمودی
  March 2, 2016 at 2:20 PM
  ۱۲ اسفند، ۱۳۹۴ ساعت ۱۴:۲۰

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

مهم ترین دلیل اینه که ربات ها به سایت ما حمله نکنند و روی دیتابیس ما دیکشنری اتک نزنند ( دیکشنری اتک یعنی دیتابیسی پر از ایمیل و پسورد که فیلد های اون را جایگزین فرم ما می کنند و می فرستن به دیتابیس ما ) حالا ممکن به خودتون بگید بازم نیاز به کپتچا ندارم چون با استفاده از جاوااسکریپت این کد رو می نویسم:

12 + 3 = ?

اما مشکل این کد چیه ؟ خوب این کد رو چه جوری می خواید رندوم درست کنید که ربات سیو ش نکنه و هر دفعه تکرار کنه ؟و؟و؟و؟ به نظرم شما باید از recaptcha گوگل استفاده کنید چون از قبل برای ما یکسری جاوااسکریپت ها و عکس هایی از قبل اماده کرده:

خوب بریم سر اصل مطلب چگونه توی ریلز اجراش کنیم

۱- جم فایل پروژه تونو باز کنید و کد زیرو داخلش قرار بدید.

gem 'recaptcha', '~> 0.4.0'

این کد به ریلز می فهمونه ما از چه ورژنی برای recaptcha استفاده می کنیم (0.4.0)


کامند لاینتونو باز کنید و داخله دایرکتوری پروژه تون بشید و bundle install رو بزنید تا همه جم ها نصب بشه

۲- حالا وقت کانفیگ کردن کپتچا هست ،ما داریم از ابزار های گوگل استفاده می کنیم بنابراین باید از گوگل یه مجوز بگیریم داخل سایت گوگل کپتچا می شیم

گوگل ریکپتچا


و روی get reCAPTCHA کلیک می کنیم

در اینجا لیستی از لیبل ها و سایت های زیر مجموعه رو داریم که می تونید در قسمت پایینی صفحه سایت های خودتون رو اضافه کنید ! اگر روی لوکال کار می کنید لینک سایت رو localhost بزارید و رجیستر کنید ، حالا از تو لیست بالای صفحه سایت خودتون رو انتخاب کنید و وارد صفحه زیر شوید :

توی این صفحه به ما می گه چه کاری انجام بدیم که بتونیم از reCAPTCHA استفاده کنیم ولی ما نیازی به این توضیح ها نداریم و فقط Secret key و Site key رو نیاز داریم دلیلش هم این هست که خود جمی که استفاده می کنیم اینهارو می سازه !


۳- وارد روت پروژه تون بشید و پوشه config/initializers رو باز کنید یه فایل جدید به اسم recaptcha.rb بسازید ودستور زیرو داخلش قرار بدید :

# path config/initializers
Recaptcha.configure do |config|
config.public_key = 'Site key'
config.private_key = 'Secret key'
end

شما می تونید Secret key و Site key رو به صورت مستقیم وارد کنید یا برای دسترسی سریع و امنیت از .env استفاده کنید ( که ما تو این قسمت درگیرش نمی شیم )

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


<%= recaptcha_tags  %>

حالا وارد اکشنی بشید که فرم به اونجا می فرستید و ولیدیت می کنید و با دستورverify_recaptcha() چک کنید که ایا کاربر کپتچا رو درست پر کرده یا نه ، متاسفانه این جم یه سری از قابلیت هاشو به صورت بای دیفالت خودش تعیین کرده مثلا به از اون قابلیت ها timeout است که به صورت دیفالت ۳ ثانیه است که یعنی از زمانی که کپتچا تولید میشه فقط کاربر ۳ ثانیه وقت داره تا به کپتچا پاسخ بده که این غیر ممکنه پس ما بایداین اپشن رو تغییر بدیم با دستور زیر:

# controller
verify_recaptcha(:timeout => 50)

ما ۳ ثانیه رو تبدیل به ۵۰ ثانیه کردیم و اگر از ۵۰ ثانیه بگزرد false برمی گردونه اپشن های دیگری هم هستن که متونید استفاده کنید مثله :

:model	Model to set errors
:attribute Model attribute to receive errors (default :base)
:message Custom error message
:private_key Override private API key.
:timeout The number of seconds to wait for reCAPTCHA servers before give up. (default 3)
:response Custom response parameter (default: params['g-recaptcha-response'])

البته این ها فقط سمت کنترلر اجرا می شن !

سمت کلاینت هم داریم که روی ظاهر و... تاثیر می زاره

:ssl	Uses secure http for captcha widget (default false, but can be changed by setting config.use_ssl_by_default)
:noscript Include content (default true)
:display Takes a hash containing the theme and tabindex options per the API. (default nil), options: 'red', 'white', 'blackglass', 'clean', 'custom'
:ajax Render the dynamic AJAX captcha per the API. (default false)
:public_key Override public API key
:error Override the error code returned from the reCAPTCHA API (default nil)
:stoken Include security token to enable the use of any domain without registration with reCAPTCHA, stoken expired will be raised when the system clock is out of sync (default true)
:size Specify a size (default nil)

همچنین اگر سایت شما ۲ زبانه است می تونید ان را ترجمه کنید (توسط I18n)

en:
recaptcha:
errors:
incorrect-captcha-sol: 'Fail'


برای ارتباط با من می تونید از ایمیل پارسکلیک استفاده کنید :

mohammad@parsclick.net