Hi,

I'm trying to write a custom backend for django registration. (http://docs.b-list.org/django-registration/0.8/backend-api.html)
I'm using python 2.7 and django 1.4.

What I want is for an existing user with suitable permissions to be able to register accounts for new users. The new user will get an email with an activation link, which will redirect the new user to a form where they set a password for their account.

I do not want the existing user to be required to set a password manually for the new user to change once they first log in.

This is what I have so far:

from django.conf import settings
from django.contrib.sites.models import RequestSite
from django.contrib.sites.models import Site
from django.contrib.auth import login

from registration import signals
from registration.models import RegistrationProfile
from registration.backends.default import DefaultBackend

class CustomBackend(DefaultBackend):
    def register(self, request, **kwargs):
        username, email = kwargs['email'], kwargs['email']
            # username is email address
        password = '' # User will have no password set.
        if Site._meta.installed:
            site = Site.objects.get_current()
        else:
            site = RequestSite(request)
        new_user = RegistrationProfile.objects.create_inactive_user(
                        username,
                        email,
                        password,
                        site)
        signals.user_registered.send(sender=self.__class__,
                                     user=new_user,
                                     request=request)
        return new_user

    def activate(self, request, activation_key):
        activated = RegistrationProfile.objects.activate_user(
                        activation_key)
        if activated:
            login(request, activated)
            signals.user_activated.send(sender=self.__class__,
                                        user=activated,
                                        request=request)
        return activated

    def post_activation_redirect(self, request, user):
        return ('set_password', (), {})

Unfortunately, when I try to log the new user in during account activation, I get an AttributeError: 'User' object has no attribute 'backend'

I know this is because I'm not calling authenticate before login, but authenticate (https://docs.djangoproject.com/en/1.4/topics/auth/#django.contrib.auth.authenticate) requires a password, which I don't want to set at this stage. I want the user to be logged in when they are redirected to the set_password form.

Advice would be appreciated.

Regards,
Ian

--
You received this message because you are subscribed to the Google Groups "Django 
users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to