rack-recaptcha [](http://stillmaintained.com/achiu/rack-recaptcha)
March 8, 2013 ยท View on GitHub
Drop this Rack middleware in your web application to enable CAPTCHA verification via Recaptcha API.
How to Use
Configuration
First, install the library with: [sudo] gem install rack-recaptcha
You have to require 'rack-recaptcha' in your gemfile.
## Gemfile
gem 'rack-recaptcha', :require => 'rack/recaptcha'
Available options for `Rack::Recaptcha` middleware are:
* :public_key -- your ReCaptcha API public key *(required)*
* :private_key -- your ReCaptcha API private key *(required)*
* :proxy_host -- the HTTP Proxy hostname *(optional)*
* :proxy_port -- the HTTP Proxy port *(optional)*
* :proxy_user -- the HTTP Proxy user *(optional, omit unless the proxy requires it)*
* :proxy_password -- the HTTP Proxy password *(optional, omit unless the proxy requires it)*
Now configure your app to use the middleware. This might be different across each web framework.
Sinatra
## app.rb
use Rack::Recaptcha, :public_key => 'KEY', :private_key => 'SECRET'
helpers Rack::Recaptcha::Helpers
Padrino
## app/app.rb
use Rack::Recaptcha, :public_key => 'KEY', :private_key => 'SECRET'
helpers Rack::Recaptcha::Helpers
Rails
## application.rb:
module YourRailsAppName
class Application < Rails::Application
...
config.gem 'rack-recaptcha', :lib => 'rack/recaptcha'
config.middleware.use Rack::Recaptcha, :public_key => 'KEY', :private_key => 'SECRET'
end
end
## application_helper.rb or whatever helper you want it in.
module ApplicationHelper
include Rack::Recaptcha::Helpers
end
## application_controller.rb or whatever controller you want it in.
class ApplicationController < ActionController::Base
...
include Rack::Recaptcha::Helpers
...
end
Helpers
The Rack::Recaptcha::Helpers module (for Sinatra, Rails, Padrino) adds these methods to your app:
Return a javascript recaptcha form
recaptcha_tag :challenge
Return a non-javascript recaptcha form
recaptcha_tag :noscript
Return a ajax recaptcha form
recaptcha_tag :ajax
For ajax recaptcha's, you can pass additional options like:
recaptcha_tag :ajax, :display => { :theme => 'red'}
For non-ajax recaptcha's, you can pass additional options like:
# Overrides the key set in Middleware
recaptcha_tag :challenge, :public_key => KEY
# Adjust Height and/or Width
recaptcha_tag :noscript, :height => 300, :width => 500
# Adjust the rows and/or columns
recaptcha_tag :challenge, :row => 3, :cols => 5
# Set the language
recaptcha_tag :noscript, :language => :en
To test whether or not the verification passed, you can use:
recaptcha_valid?
The recaptcha_valid? helper can also be overloaded during tests. You
can set its response to either true or false by doing the following:
# Have recaptcha_valid? return true
Rack::Recaptcha.test_mode!
# Or have it return false
Rack::Recaptcha.test_mode! :return => false
For additional options and resources checkout the customization page
Example
In Padrino, here's how you would use the helpers.
## new.haml
- form_tag '/login', :class => 'some_form', :method => 'post' do
= text_field_tag :email
= password_field_tag :password
= recaptcha_tag(:challenge)
= submit_tag "Submit"
## sessions.rb
post :create, :map => '/login' do
if recaptcha_valid?
"passed!"
else
"failed!"
end
end
In rails, you'll need to use also use the raw method:
## new.html.haml
- form_tag '/login' do
= raw recaptcha_tag(:challenge)
= submit_tag "Submit"
Contributors
Daniel Mendler - minad
- support for multiple paths and helpers clean up
Eric Anderson - eric1234
- Make verify independently usable.
Chad Johnston - iamthechad
- Adding Error Message handling in recaptcha widget
Eric Hu - eric-hu
- Patching error message issue when no
requestis present
Tobias Begalke - elcamino
- Added HTTP Proxy support
Julik Tarkhanov - julik
- Adding rack-recaptcha to travis-ci
Rob Worley - robworley
- Adding language setting for recaptcha form
sam71 - sam71
- Fix recaptcha hanging when used in proxy environment.
Note on Patches/Pull Requests
- Fork the project.
- Make your feature addition or bug fix.
- Add tests for it. This is important so I don't break it in a future version unintentionally.
- Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
- Send me a pull request. Bonus points for topic branches.
Copyright
Copyright (c) 2010, 2011, 2012 Arthur Chiu. See LICENSE for details.
