Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there any solutions to add captcha to Django-allauth?

Is there any solutions to use captcha with django-allauth? I want to use captcha on registration form for standard email+password registrations.

like image 497
Antonio Avatar asked Mar 26 '14 15:03

Antonio


1 Answers

I too needed to do this with django-allauth and found that implementing the django-recaptcha package to be relatively simple.

Configure django-recaptcha

Sign up for a recaptcha account.

Plug your settings in

# settings.py

RECAPTCHA_PUBLIC_KEY = 'xyz'
RECAPTCHA_PRIVATE_KEY = 'xyz'

RECAPTCHA_USE_SSL = True     # Defaults to False

Customize SignupForm

After installing django-recaptcha, I followed someguidelines for customizing the SignupForm.

from django import forms
from captcha.fields import ReCaptchaField

class AllAuthSignupForm(forms.Form):

    captcha = ReCaptchaField()

    def save(self, request, user):
        user = super(AllAuthSignupForm, self).save(request)
        return user

You also need to tell allauth to inherit from this form in settings.py

ACCOUNT_SIGNUP_FORM_CLASS = 'myapp.forms.AllAuthSignupForm'

Wire up signup form template

{{ form.captcha }} and {{ form.captcha.errors }} should be available on the signup template context at this point.

That was it! Seems like all the validation logic is tucked into the ReCaptchaField.

like image 71
scvnc Avatar answered Oct 03 '22 08:10

scvnc