有人有任何建议吗?
在Rails应用中添加验证码最简单的方法是使用Ambethia reCAPTCHA:
1. 安装:
config.gem "ambethia-recaptcha", :lib => "recaptcha/rails",
:source => "http://gems.github.com"
如果你喜欢的话,你也可以将它安装为一个插件。
2. 获取一个 reCAPTCHA 账号:
你需要创建一个reCAPTCHA密钥。你可以在 reCAPTCHA 网站 上这样做。
3. 使用方法:
使用recaptcha_tags
来输出必要的HTML代码,然后使用verify_recaptcha
验证输入。
4. 更多阅读:
将以下内容添加到你的 GEMFILE 中:
gem "galetahub-simple_captcha", :require => "simple_captcha"
或者
gem 'galetahub-simple_captcha', :require => 'simple_captcha',
:git => 'git://github.com/galetahub/simple-captcha.git'
如果您使用Bundler(或者使用适用于Rails配置的包管理器),则运行bundle install
安装后,请按照以下简单步骤设置插件。设置将取决于应用程序使用的Rails版本。
rails generate simple_captcha
rake db:migrate
在文件“app/controllers/application.rb”中添加以下行:
ApplicationController < ActionController::Base
include SimpleCaptcha::ControllerHelpers
end
<%= show_simple_captcha %>
在控制器的动作中进行身份验证
if simple_captcha_valid?
do this
else
do that
end
在表单标签内的视图文件中添加以下代码
<%= show_simple_captcha(:object=>"user") %>
class User < ActiveRecord::Base
apply_simple_captcha
end
<%= form_for @user do |form| -%>
...
<%= form.simple_captcha :label => "Enter numbers.." %>
...
<% end -%>
注意:@user.valid? 仍然可以正常工作,但它不会验证验证码。
@user.valid_with_captcha?
注意: @user.save仍然可以正常工作,它不会验证验证码。
@user.save_with_captcha
SimpleCaptcha检测到您使用Formtastic并追加
“SimpleCaptcha::CustomFormBuilder”.
<%= form.input :captcha, :as => :simple_captcha %>
*label* - provides the custom text b/w the image and the text field, the default is “type the code from the image”
*object* - the name of the object of the model class, to implement the model based captcha.
*code_type* - return numeric only if set to ‘numeric’
image_style - provides the specific image style for the captcha image.
这个插件提供了八种不同的样式:
默认样式是“简洁蓝”。你也可以指定“随机”来选择随机图像样式。
distortion - handles the complexity of the image. The :distortion can be set to ‘low’, ‘medium’ or ‘high’. Default is ‘low’.
*创建“rails_root/config/initializers/simple_captcha.rb”*
SimpleCaptcha.setup do |sc|
# default: 100x28
sc.image_size = '120x40'
# default: 5
sc.length = 6
# default: simply_blue
# possible values:
# 'embosed_silver',
# 'simply_red',
# 'simply_green',
# 'simply_blue',
# 'distorted_black',
# 'all_black',
# 'charcoal_grey',
# 'almost_invisible'
# 'random'
sc.image_style = 'simply_green'
# default: low
# possible values: 'low', 'medium', 'high', 'random'
sc.distortion = 'medium'
end
SimpleCaptcha.setup do |sc|
sc.image_style = 'mycaptha'
sc.add_image_style('mycaptha', [
"-background '#F4F7F8'",
"-fill '#86818B'",
"-border 1",
"-bordercolor '#E0E2E3'"])
end
SimpleCaptcha.setup do |sc|
sc.image_magick_path = '/usr/bin' # you can check this from console by running: which convert
end
您可以提供存储临时文件的路径。当您无法访问默认目录 /tmp 时,这将非常有用。
SimpleCaptcha.setup do |sc|
sc.tmp_path = '/tmp' # or somewhere in project eg. Rails.root.join('tmp/simple_captcha').to_s, make shure directory exists
end
如何更改SimpleCaptcha DOM元素的CSS?
您可以根据需要在此文件中更改SimpleCaptcha DOM元素的CSS。
*/app/views/simple_captcha/_simple_captcha.erb*
基于控制器的示例
<%= show_simple_captcha %>
<%= show_simple_captcha(:label => "human authentication") %>
<%= show_simple_captcha(:object => 'user', :label => "human authentication") %>
模型选项
message - provides the custom message on failure of captcha authentication the default is “Secret Code did not match with the Image”
add_to_base - if set to true, appends the error message to the base.
模型示例
class User < ActiveRecord::Base
apply_simple_captcha
end
class User < ActiveRecord::Base
apply_simple_captcha :message => "The secret Image and code were different", :add_to_base => true
end
好的,ReCaptcha可以胜任这项工作,网上有许多相关教程。
然而,在您的控制器中编写正确的“def create”(创建方法),以便同时传递表单中的任何内容并验证Recaptcha。然后它将很好地工作。
使用ReCaptcha插入表单后,出现了一个小问题,表单验证停止工作了。但是,可以通过在模型文件中插入简单的代码来解决这个问题:
after_validation :on => :create
(:create = 是您控制器中的 "def create" 方法。它将强制表单先进行验证,然后再验证 Recaptcha。
我在我的 PHP 项目中使用了 Recaptcha。http://recaptcha.net/
根据该网站,它还有 Ruby 插件(http://recaptcha.net/resources.html)。虽然第一个 Ruby 链接无法使用,但下一个链接仍然有效。http://svn.ambethia.com/pub/rails/plugins/recaptcha/
请检查一下。
我在Rails应用程序中使用了Ambethia Recapchat。相比其他工具,它更加简单易用。
对于功能而言,reCAPTCHA对于Rails来说非常棒。然而,如果您需要XHTML验证,请远离它!这个插件不会(也许永远不会)进行验证。我发现令人尴尬的是,我的整个网站中只有一个页面无法通过验证 - 那就是带有reCAPTCHA的页面。如果还有其他选择,我一定会选择其他的。