"reCAPTCHA is a free CAPTCHA service that helps to digitize books, newspapers and old time radio shows" -

I had some issues making it work well with Lift so I decided to blog about it (sharing is caring)

The standard approach described docs (code under) did't show up in Opera so I chose to go with the AJAX API.

The html:

Recaptcha.create() brings up the captcha. When the form is submitted we call setHidden() to set the hidden lift form elements. <lift:msgs/> displays messages set with S.error.

On the server side we verify the response by calling the reCaptcha API.

Binding using the -%> operator binds the attributes from the html (here the essential id attributes). The code was tested on Google App Engine and might need some modifications to work other places.