Django automatic login after user registration (1.4)

霸气de小男生 提交于 2019-12-21 05:00:54

问题


I have an issue where I am successfully registering users - however, I want users to be logged in on registration. Here is the code that represents my registration view. Any thoughts on why the user is not auto-logged in?

Notes:

  • The user is being registered correctly, they can log in after this
  • authenticate(**kwargs) is returning the correct user
  • In settings.py I have:

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

Thanks!

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)

回答1:


Ah! I figured it out. In case anyone has this issue, import login from django.contrib.auth if you are calling it manually - I was importing the view. Commented out code represents the bad import for my situation.

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



回答2:


I do it this way:

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



回答3:


for class based views here was the code that worked for me (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)


来源:https://stackoverflow.com/questions/15192808/django-automatic-login-after-user-registration-1-4

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!