2011-06-03 20 views
6

Tengo un django-registración en funcionamiento. Me gustaría agregarle dos características adicionales y estoy teniendo dificultades para entender el funcionamiento interno del proceso de inicio de sesión.Auto iniciar sesión y volver a enviar el correo electrónico

1) Cuando un usuario hace clic en el correo electrónico de activación, activa la cuenta pero no ingresa al usuario, ¿cómo lo haré haciendo clic en el enlace de activación para que la cuenta esté activa e inicie sesión automáticamente en el usuario? Este es actualmente lo que mi función activate parece -

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 

actualización: yo era capaz de añadir un truco para conseguir este trabajo, el uso de sesiones. Seguro que no es la solución ideal, pero aquí es lo que tengo -

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) Me gustaría añadir una opción para que un usuario podrá hacer clic en un botón para recibir otro correo electrónico de activación (en caso de que falle para recibir el primero). Al parecer, el siguiente es donde el mensaje de activación se envía al registrarse -

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

¿Cómo voy a enviar otro mensaje de activación dada la cuenta de usuario ya se ha creado?

Respuesta

14

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 método.

+1

¿enviará_activation_email trabajo para reenviar el proceso de enlace de activación? – Ashiya

Cuestiones relacionadas