16 December 2006
This post may be outdated due to it was written on 2006. The links may be broken. The code may be not working anymore. Leave comments if needed.
Catalyst::Plugin::Captcha 在 CPAN 的文档不是很明了。我在 Foorum 中用了一下。把经过简单的写一下。

功能要求是“密码错误”的登录次数超过三次以后就显示出验证码。这样可以防止 script 暴力破解 user 密码。把登录错误次数可以放到 session 里,但是 script 可以通过删除 cookie 来伪造 sessionid, 所以我就把登录错误次数放到了 memcached 里。

首先当然是 cpan 安装模块,然后在 yml 中配置:
captcha:
session_name: captcha_string
new:
width: 80
height: 30
lines: 1
gd_font: giant
create:
- normal
- rect
particle:
- 100
out:
force: jpeg
然后弄一个 captcha 的 Global 函数。
sub captcha : Global {
my ($self, $c) = @_;
$c->create_captcha();
}
create_captcha 返回的是一个 img 的 source, 也就是验证码那个图片的内容。
所以如果你要显示出验证码来的话,代码大致上是这样的:
<input type='text' name='captcha' size='12' /><img src='/captcha' />
img 的地址就是刚才的 Global 所弄的函数。插件将这个图片实际上的字符串内容放到了当前的 session 里。
$c->session->{ $c->config->{captcha}->{session_name} } = $random_string;
然后它提供的 validate_captcha method 就是比较 user 输入的东西跟这个 session 的内容。看看源代码就觉得非常清晰。
我最后的 Logon.pm
还是自己点过去看看吧。:)


blog comments powered by Disqus