2011-06-03 66 views
6

我有一个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 

更新:我可以添加一个黑客得到这个工作,通过会议。当然,它不是理想的解决方案,但这里是我 -

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) 

我怎么会派给用户帐户中的另一个激活邮件已经被创造出来的?

回答

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方法。

+1

将send_activation_email工作重新发送激活链接过程? – Ashiya 2014-12-06 12:12:52