5

我有一個問題,我成功註冊用戶 - 但是,我希望用戶在註冊時登錄。這是代表我的註冊視圖的代碼。有關爲什麼用戶沒有自動登錄的想法?用戶註冊後Django自動登錄(1.4)

注:

  • 用戶正在正確註冊,他們可以在這個
  • 身份驗證後登錄(** kwargs)將返回正確的用戶
  • 在settings.py我有:

    AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',) 
    

謝謝!

def register(request): 
    user_creation_form = UserCreationForm(request.POST or None) 
    if request.method == 'POST' and user_creation_form.is_valid(): 
     u_name = user_creation_form.cleaned_data.get('username') 
     u_pass = user_creation_form.cleaned_data.get('password2') 
     user_creation_form.save() 
     print u_name # Prints correct username 
     print u_pass # Prints correct password 
     user = authenticate(username=u_name, 
          password=u_pass) 
     print 'User: ', user # Prints correct user 
     login(request, user) # Seems to do nothing 
     return HttpResponseRedirect('/book/') # User is not logged in on this page 
    c = RequestContext(request, {'form': user_creation_form}) 
    return render_to_response('register.html', c) 

回答

3

啊!我想到了。如果任何人有這個問題,如果你手動調用它,從django.contrib.auth導入登錄 - 我正在導入視圖。註釋掉的代碼代表了我的情況的不良輸入。

# from django.contrib.auth.views import login 
from django.contrib.auth import authenticate, logout, login 
3

我做這種方式:

u.backend = "django.contrib.auth.backends.ModelBackend" 
login(request, u) 
+0

謝謝!這很好。 – zallarak 2013-03-04 00:54:31

+0

我也使用 – nemesisdesign 2014-03-11 18:24:28

1

這裏基於類的觀點是,對我工作的代碼(Django的1.7)

from django.contrib.auth import authenticate, login 
from django.contrib.auth.forms import UserCreationForm 
from django.views.generic import FormView 

class SignUp(FormView): 
    template_name = 'signup.html' 
    form_class = UserCreationForm 
    success_url='/account' 

    def form_valid(self, form): 
     #save the new user first 
     form.save() 
     #get the username and password 
     username = self.request.POST['username'] 
     password = self.request.POST['password1'] 
     #authenticate user then login 
     user = authenticate(username=username, password=password) 
     login(self.request, user) 
     return super(SignUp, self).form_valid(form) 
+0

你的'form_class'應該是'UserCreationForm'而不是'UserCreateForm'我想。 – blissini 2015-11-18 10:08:55

+0

感謝@blissini改變了它 – colins44 2015-11-18 15:52:14

+0

因爲我需要一個解決方案,正如@Patrick指出在這個線程的評論:http://stackoverflow.com/questions/3222549/how-to-automatically-login-a-user在註冊後的django中,使用'authenticate(username = form.cleaned_data ['username'],password = form.cleaned_data ['password1'])'進行身份驗證甚至更好,以防由於某種原因在驗證期間。 – blissini 2015-11-18 22:22:53