[Fixed]-How to disable email activation in django-registration app?

3👍

You could always modify this line to:

new_user = RegistrationProfile.objects.create_inactive_user(username=self.cleaned_data['username'],
                                       password=self.cleaned_data['password1'],
                                       email=self.cleaned_data['email'],
                                       profile_callback=profile_callback,
                                       send_email = False)

Or you could change this line to:

def create_inactive_user(self, username, password, email,
                         send_email=False, profile_callback=None):

13👍

In the current tip versions of django-registration there is a simple backend with no email and you can write your own backend to specify the workflow you want. See here https://bitbucket.org/ubernostrum/django-registration/src/fad7080fe769/docs/backend-api.rst for documentation.

To use the simple one without email, just change your urls.py to point to this backend, eg.

   (r'^accounts/', include('registration.backends.simple.urls')),    

7👍

Why not use this method and just use the simple backend that comes with django-registration instead of the default backend?

The new work flow would be…
1. A user signs up by filling out a registration form.
2. The user’s account is created and is active immediately, with no intermediate confirmation or activation step.
3. The new user is logged in immediately.

so on your main urls.py you would change:

url(r'^accounts/', include('registration.backends.default.urls')),

to

url(r'^accounts/', include('registration.backends.simple.urls')),

6👍

Better to fix the problem at the root than bandage it by calling commands to automatically activate the user.

Add this method to registration models.py:

   def create_active_user(self, username, email, password,
                             site):
        """
        Create a new, active ``User``, generate a
        ``RegistrationProfile`` and email its activation key to the
        ``User``, returning the new ``User``.
        """
        new_user = User.objects.create_user(username, email, password)
        new_user.is_active = True
        new_user.save()

        registration_profile = self.create_profile(new_user)

        return new_user
    create_active_user = transaction.commit_on_success(create_active_user)

Then, edit registration/backend/defaults/init.py and find the register() method.

Change the following to call your new method:

#new_user = RegistrationProfile.objects.create_inactive_user(username, email,
                                                            #password, site)
new_user = RegistrationProfile.objects.create_active_user(username, email,
                                                            password, site)
👤Lionel

1👍

Rather than modifying the registration app, why not just activate the user the same way django-registration does:

user.is_active = True
user.save()
profile.activation_key = “ALREADY_ACTIVATED”
profile.save()

After looking at it even more… I think what you want is to use both solutions. Probably add the above code, just after the change suggested by Dominic (though I would suggest using signals, or subclassing the form if possible)

OK final Answer:

new_user = RegistrationProfile.objects.create_inactive_user(username=self.cleaned_data['username'],
                                   password=self.cleaned_data['password1'],
                                   email=self.cleaned_data['email'],
                                   profile_callback=profile_callback,
                                   send_email = False)
RegistrationProfile.objects.activate_user(new_user.activation_key)
👤Jiaaro

Leave a comment