Автоматический вход и повторная отправка электронной почты - PullRequest
6 голосов
/ 03 июня 2011

У меня есть django-регистрация и работает.Я хотел бы добавить к нему две дополнительные функции, и у меня возникли некоторые трудности с пониманием внутренней работы процесса входа в систему.

1) Когда пользователь нажимает на электронное письмо для активации, он активирует учетную записьно не регистрирует пользователя, как бы я сделал так, чтобы щелкнув ссылку активации, вы одновременно активировали учетную запись и автоматически вошли в систему?В настоящее время моя функция activate выглядит следующим образом:

def activate(self, request, activation_key):
    activated = RegistrationProfile.objects.activate_user(activation_key)
    if activated:
        signals.user_activated.send(sender=self.__class__,
                                    user=activated,
                                    request=request)
        login (request, activated) ### if I try this line, it throws an error 'User'        
                                   ### object has no attribute 'backend
    return activated

update : я смог добавить хак, чтобы он заработал, используя сеансы,Конечно, это не идеальное решение, но вот что у меня есть -

def register(self, request, **kwargs):
    ...        
    new_user.save()
    request.session['username'] = username
    request.session['password'] = password
    return new_user

def activate(self, request, activation_key):
    username = request.session['username']
    password = request.session['password']
    activated = RegistrationProfile.objects.activate_user(activation_key)
    if activated:
        signals.user_activated.send(sender=self.__class__,
                                    user=activated,
                                    request=request)
        user = authenticate(username=username, password=password)
        login(request, user)
    return activated

2) Я хотел бы добавить опцию для пользователя, чтобы иметь возможность нажать кнопку, чтобы получить другое письмо активации (следуетон не смог получить первый).Похоже, что в этом случае электронное письмо с кодом активации отправляется при регистрации -

  signals.user_registered.send(sender=self.__class__,
                                 user=new_user,
                                 request=request)

Как мне отправить другое электронное письмо с активацией, если учетная запись пользователя уже создана?

1 Ответ

14 голосов
/ 03 июня 2011

1).

from django.contrib.auth import login
from registration import signals

def login_on_activation(user, request, **kwargs):
    user.backend='django.contrib.auth.backends.ModelBackend'
    login(request, user)

signals.user_activated.connect(login_on_activation)

2).registration.models.RegistrationProfile.send_activation_email метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...