Search code examples
captchadjango-allauth

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.


Solution

  • 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.