| Catalyst-Controller-reCAPTCHA documentation | Contained in the Catalyst-Controller-reCAPTCHA distribution. |
Catalyst::Controller::reCAPTCHA - authenticate people and read books!
Catalyst::Controller wrapper around Capatcha::reCAPTCHA. Provides
a number of Private methods that deal with the recaptcha.
In MyApp.pm (or equivalent in config file):
__PACKAGE__->config->{recaptcha}->{pub_key} =
'6LcsbAAAAAAAAPDSlBaVGXjMo1kJHwUiHzO2TDze';
__PACKAGE__->config->{recaptcha}->{priv_key} =
'6LcsbAAAAAAAANQQGqwsnkrTd7QTGRBKQQZwBH-L';
(the two keys above work for http://localhost unless someone hammers the reCAPTCHA server with failures, in which case the API keys get a temporary ban).
captcha_get : Private
Sets $c->stash->{recaptcha} to be the html form for the http://recaptcha.net/ reCAPTCHA service which can be included in your HTML form.
captcha_check : Private
Validates the reCaptcha using Captcha::reCAPTCHA. sets $c->stash->{recaptcha_ok} which will be 1 on success. The action also returns true if there is success. This means you can do:
if ( $c->forward(captcha_check) ) {
# do something based on the reCAPTCHA passing
}
or alternatively:
if ( $c->stash->{recaptcha_ok} ) {
# do something based on the reCAPTCHA passing
}
If there's an error, $c->stash->{recaptcha_error} is set with the error string provided by Captcha::reCAPTCHA.
See the t/lib/TestApp example in the Catalyst::Controller::reCAPTCHA distribution.
Kieren Diment zarquon@cpan.org.
This library is free software, you can redistribute it and/or modify it under the same terms as Perl itself.
| Catalyst-Controller-reCAPTCHA documentation | Contained in the Catalyst-Controller-reCAPTCHA distribution. |
package Catalyst::Controller::reCAPTCHA; use strict; use warnings; use base 'Catalyst::Controller'; use Captcha::reCAPTCHA; use Carp 'croak'; our $VERSION = '0.7'; sub captcha_get : Private { my ($self, $c) = @_; my $cap = Captcha::reCAPTCHA->new; $c->stash->{recaptcha} = $cap->get_html($c->config->{recaptcha}->{pub_key}); return; } sub captcha_check : Private { my ($self, $c) = @_; my $cap = Captcha::reCAPTCHA->new; my $challenge = $c->req->param('recaptcha_challenge_field'); my $response = $c->req->param('recaptcha_response_field'); unless ( $response && $challenge ) { $c->stash->{recaptcha_error} = 'User appears not to have submitted a recaptcha'; return; } my $key = $c->config->{recaptcha}->{priv_key} || croak 'must set recaptcha priv_key in config'; my $result = $cap->check_answer( $key, $c->req->address, $challenge, $response, ); croak 'Failed to get valid result from reCaptcha' unless ref $result eq 'HASH' && exists $result->{is_valid}; $c->stash->{recaptcha_error} = $result->{error} || 'Unknown error' unless $result->{is_valid}; $c->stash->{recaptcha_ok} = 1 if $result->{is_valid}; return 1; }
1;