虽然使用现有的宝石来为每个单独的表单添加一个recaptcha是一个非常简单的事情,我无法弄清楚如何创建recaptcha,如下图所示.
| user submits question form <------- | | V | ============================= | | Are the attributes valid? | ----> NO ============================= | YES | V =============================================================== | Has user submitted more than 4 forms in the last 5 minutes? | --NO---| =============================================================== | | | YES | | | redirect them to recaptcha form | | | V V ============================ ************************************ | Captcha form incorrect? | -- NO ----------> * save the form as a record * ============================ * and redirect user to see it * | ^ ************************************ YES | | NO V | ================================================== | Have they been redirected to the captcha form | | more than 5 times in the last minute? | ================================================== | YES | V ******************* * TEMPORARY BLOCK * *******************
我只是无法弄明白该怎么做.例如,当用户填写验证码表单时,保存的提交数据在哪里?在会议中?在缓存中?在饼干?有关如何实现这一目标的任何指示?
我正在考虑应用程序控制器中的某种功能,由before_action
全钩子触发.每次调用此操作时(即,只要用户请求我的应用程序的链接),操作就会在时间戳数组中加上时间戳.当这个数组充满10个时间戳时,我们计算出平均值,并且在x量下我们阻止它们.这将阻止抓取工具和垃圾邮件发送者.
However, I still want to let google, yahoo! and bing in!
为什么不上网回机器?我不想妥协我的应用程序.在我跳到此之前,我需要了解很多细微差别.
这是我想要简单实现的行为:
*如果用户在y秒内发送x个请求,请将其重定向到重新填充页面.如果他们通过了recaptcha,让他们继续正常.*
我对视觉和逻辑(基于问题)的回收都持开放态度,只想要一个解决方案而不是为每一个形式添加一个recaptcha ...
另外,我不喜欢使用宝石,因为他们觉得我喜欢黑盒子.我更喜欢自己做.但是,我确实喜欢像州机器和载波一样的多才多艺的宝石,所以如果有一个开放式的recaptcha宝石,我会对此持开放态度.