2010-07-11 44 views
57

這自動登錄用戶註冊後就是我目前使用的登記:如何在Django

def register(request): 
    if request.method == 'POST': 
     form = UserCreationForm(request.POST) 
     if form.is_valid(): 
      new_user = form.save() 
      messages.info(request, "Thanks for registering. Please login to continue.") 
      return HttpResponseRedirect("/dashboard/") 
    else: 
     form = UserCreationForm() 
    return render_to_response("accounts/register.html", { 
     'form': form, 
    }, context_instance=RequestContext(request)) 

是否有可能不要求用戶創建一個帳戶後手動登錄,而是簡單地自動登錄他們?謝謝。

編輯:我曾嘗試登錄()函數沒有成功。我相信問題是AUTHENTICATION_BACKENDS沒有設置。

+0

我認爲你可以使用這樣的:HTTP:/ /docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.login – 2010-07-11 09:38:40

回答

87

使用authenticate()login()功能:

from django.contrib.auth import authenticate, login 

def register(request): 
    if request.method == 'POST': 
     form = UserCreationForm(request.POST) 
     if form.is_valid(): 
      new_user = form.save() 
      messages.info(request, "Thanks for registering. You are now logged in.") 
      new_user = authenticate(username=form.cleaned_data['username'], 
            password=form.cleaned_data['password1'], 
            ) 
      login(request, new_user) 
      return HttpResponseRedirect("/dashboard/") 
+1

謝謝。我曾嘗試過,但沒有成功,但現在我意識到問題在於我沒有指定後端。行: new_user.backend ='django.contrib.auth.backends.ModelBackend' 登錄(請求,new_user) 做的伎倆。 (或者應該在其他地方指定後端而不是每次註冊? – Chris 2010-07-11 09:40:00

+2

在'settings.py'中將'AUTHENTICATION_BACKENDS'設置爲'django.contrib.auth.backends.ModelBackend'。有關更多信息,請參閱http://docs.djangoproject.com/en/1.2/topics/auth/#specifying-authentication-backends。 – 2010-07-11 10:03:44

+0

即使使用該設置,我也會得到錯誤「'User'對象沒有屬性'backend'」 – Chris 2010-07-11 10:25:45

5

基於類的觀點在這裏是爲我工作的代碼(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 = UserCreateForm 
    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

爲什麼需要認證(用戶名=用戶名,密碼=密碼)'?爲什麼不傳遞用戶對象? – avi 2016-03-15 17:35:35

+1

@avi在手動登錄用戶時,必須在調用login()之前使用authenticate()成功驗證用戶身份。 authenticate()在用戶身上設置一個屬性,指出哪個驗證後端成功驗證了該用戶(請參閱後端文檔以獲取詳細信息),並且稍後在登錄過程中需要此信息。如果您嘗試直接登錄從數據庫檢索到的用戶對象,則會引發錯誤。來源:https://docs.djangoproject.com/en/1.9/topics/auth/default/#django.contrib.auth.login – f1nn 2016-04-22 09:42:25