哪位仁兄推荐一个
captcha 相关的就是 recaptcha 这个 gem,也就是 google 的那个 recaptcha,这个不是给中国人用的。其他的就没有写好的 gem 了吧,有也是过时的东西。直接用 jquery 的就行了。。自己实现一下。
嗯嗯 欢迎围观我的视频验证码"印象码"⋯⋯ http://ruby-china.org/topics/752 最近忙着做产品 明天抽空把 Gem 完善一下
#3 楼 @inetufo 雖然都叫 recaptcha 但是名字一樣,內容不同啊。我們去年的項目中我就遇到這個問題了,當時 Rails 的版本是 3.0.3
我試過
gem 'simple_captcha', :git => 'git://github.com/galetahub/simple-captcha.git'
後來證明這玩意是個渣,別走我老路了。
最後選了
gem 'recaptcha', :require => 'recaptcha/rails'
相對來說這個還可以,要做 Ajax 方式的註冊的話,自己需要重寫它的一個 Helper 方法。不過半年多過去了,也許這個 Bug 已經被修好了。
你也可以試試下面幾個,選擇適合你的 https://bitbucket.org/mml/ruby-recaptcha/wiki/Home http://github.com/achiu/rack-recaptcha https://github.com/ambethia/recaptcha/
我之前的几个项目是用这个:
https://github.com/huacnlee/captcha
但是我发现被人破解了 没被破解,之前的漏洞是微博登陆导致的。
#9 楼 @anylei 是不是容易被破解我也不清楚,問問 @southwolf 吧,他做视频验证码似乎對如何防止破解比較有心得。怎麼渣我實在說不好,我覺得渣的地方可能是不符合我的習慣。
另外 @rookylu 說的 simple_captcha 的項目地址是 https://github.com/beaucollins/simple_captcha 而我以前用的那個項目地址是 https://github.com/galetahub/simple-captcha 大家說的不是同一個。所以我在回帖裡面先說了雖然名字接近,但是內容不同。
#12 楼 @hooopo 關於被破解的問題可以看看 #2 楼 @southwolf 的帖子 http://ruby-china.org/topics/752 下面的回帖值得一看哦
#12 楼 @hooopo 我那个被破解的原因是由于生成的数量有限,被“碰撞破解”了
http://ruby-china.org/topics/752#15
easy_captcha 不错!刚刚我试了一下:
https://github.com/phatworx/easy_captcha
我那个样子的配置文件:
EasyCaptcha.setup do |config|
# Cache
config.cache = true
# Cache temp dir from Rails.root
config.cache_temp_dir = Rails.root + 'tmp' + 'captchas'
# Cache size
config.cache_size = 10
# Cache expire
config.cache_expire = 10.seconds
# Chars
config.chars = %w(2 3 4 5 8 A B C D E F G H J K L M N Q R S T U V W X Y Z)
# Length
config.length = 5
# Image
config.image_height = 30
config.image_width = 90
# configure generator
config.generator :default do |generator|
# Font
generator.font_size = 18
generator.font_fill_color = "#FFFFFF"
generator.font_stroke_color = '#111111'
generator.font_stroke = 2
# generator.font_family = File.expand_path('../../resources/afont.ttf', __FILE__)
generator.image_background_color = "#FFFFFF"
# Wave
# generator.wave = true
# generator.wave_length = (60..100)
# generator.wave_amplitude = (3..5)
# Sketch
generator.sketch = true
generator.sketch_radius = 0
generator.sketch_sigma = 0.5
# Implode
# generator.implode = 0.3
# Blur
generator.blur = false
# generator.blur_radius = 0.5
# generator.blur_sigma = 0.2
end
end
@huacnlee 你好,我在用 easy_captcha 遇到了这样的问题。Started GET "/captcha?i=1343537519" for 127.0.0.1 at 2012-07-29 12:52:00 +0800
RuntimeError (can't modify frozen string):
actionpack (3.2.1) lib/action_dispatch/http/parameters.rb:47:in force_encoding'
actionpack (3.2.1) lib/action_dispatch/http/parameters.rb:47:in
encode_params'
actionpack (3.2.1) lib/action_dispatch/http/parameters.rb:59:in block in encode_params'
actionpack (3.2.1) lib/action_dispatch/http/parameters.rb:52:in
each'
actionpack (3.2.1) lib/action_dispatch/http/parameters.rb:52:in `encode_params
...
请问你遇到过这样的问题吗?
#19 楼 @ailen 这个问题已经解决了,有人打了补丁并被作者合并进源码了,最新的 0.5.0 版本应该已经修复了。不过那个版本依赖 bundler 1.0.X,反而 0.4.5 版可以和 bundler 1.1.X 兼容。。。我就是中枪了。github 上的源码已经修复了 bundler 依赖的问题。如果你是 bundler 1.1.X,只能在 Gemfile 里指定源了
gem 'easy_captcha', :git => 'https://github.com/phatworx/easy_captcha.git'
#18 楼 @huacnlee 试了一下,验证码很好很漂亮,但……
我怎么判断提交过来的值对不对呢……
找到了验证的方法:
if captcha_valid?(params[:captcha])
p "~~~~~~~~~~~~~~~~~~~~"
end
但有一个奇怪的问题,就是这个验证老是不对,后来开 Firebug 查了一下,发现 它会一次产生两个码,生效的是我看不见的这个 (标 2 的那个) 我的 html.erb 文件如下:
<h1>Login111#login</h1>
<p>Find me in app/views/login/login.html.erb</p>
<form>
<p><%= captcha_tag %></p>
<p><%= text_field_tag :captcha %></p>
<p><%= submit_tag 'Validate' %></p>
</form>
controller 就没什么了:
class LoginController < ApplicationController
def login
if captcha_valid?(params[:captcha])
p "~~~~~~~~~~~~~~~~~~~~"
end
end
end
跪求解……
验证码用皕应的 HCaptcha 吧,不错,能解决问题,我们站被注册机搞死了,搞了 2,3 个月,后来我老大的同学推荐用皕应的,现在问题彻底解决,不过 Ruby 好像没有例子,皕应的官网 http://www.hinsite.com