If I were doing this, I would create a view, written (or decorated) to require a new permission (or allowing superuser without the permission) to use, containing a form to collect minimal information, certainly email and username, probably also human name. The form class would have validation that attempts to create a new auth.User with that information and an unusable password (validation failing, for example, if the username already exists). If the form succeeds, the view triggers a password reset email for that user.
All the hard parts are already in there, best to use them. Bill On Sat, Oct 27, 2012 at 9:46 AM, Ian Foote <i...@feete.org> wrote: > 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. > -- 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.