2013-04-20 14 views
7

In particolare, dopo l'autenticazione e il reindirizzamento, request.user è un utente anonimo.Django: request.user non impostato dopo il reindirizzamento

login (funzione di visualizzazione)

def login(request): 
if request.method == 'POST': 

    form = LoginForm(request.POST) 

    if form.is_valid(): 
     #django.contrib.auth.login 
     Login(request, form.get_user()) 
     str = reverse('cm_base.views.index') 
     return HttpResponseRedirect(str) 
    else: 
      # Their password/email combination must have been incorrect 
     pass 

else: 
    form = LoginForm() 

return render_to_response('cm_base/login.html', 
          {"DEBUG": True, 
          'form' : form 
          }, 
          context_instance=RequestContext(request)) 

nella vista indice, ho tolto il decoratore login_required e testato l'oggetto request.user

def index(request): 
test = request.user.is_authenticated() 

return render_to_response('cm_base/index.html', 
          {"DEBUG": True, 
          "user": request.user,}, 
          context_instance=RequestContext(request)) 

test restituisce false.

Fix

ho finito per chiamare direttamente la vista indice. Sono ancora confuso sul motivo per cui l'oggetto utente è stato perso quando ho chiamato HttpResponseRedirect.

def login(request): 
if request.method == 'POST': 
    form = LoginForm(request.POST) # Not shown in this example 

    if form.is_valid(): 
     Login(request, form.get_user()) 
     str = reverse('cm_base.views.index') 
     return index(request) 
    else: 
      # Their password/email combination must have been incorrect 
     pass 

else: 
    form = LoginForm() 
+1

Aggiungi la tua intera logica della vista, non c'è modo di dire che cosa il vostro modulo e il metodo di login assomigliano dal frammento avete pubblicato. –

+0

'request.user.is_authenticated()' restituisce TRUE nella vista di accesso dopo aver autenticato l'utente? – Rohan

+1

Potresti condividere con noi il tuo modulo e la vista di accesso in uno snippet pastebin.com? Grazie. –

risposta

0

Quale backend auth stai usando? Se è diverso da ModelBackend, assicurati che il metodo get_user sia corretto. Sembra che il middleware auth invii un identificatore diverso (come il pk invece di un nome utente) rispetto a quello che stai cercando nel tuo metodo get_user.

-1

Questa è stata la correzione

<link rel="icon" href="{{ STATIC_URL }}img/favicon.ico" /> 

Questo file mancava dalla directory statica. Il 404 risultante stava interrompendo la sessione dell'utente.

3

Un sacco di cose che succedono qui che non dovrebbero essere. Innanzitutto, non è necessario passare request.user, è disponibile per impostazione predefinita fino a quando si utilizza RequestContext, che si è.

Login() questo metodo, cosa sta facendo esattamente? Django fornisce uno built-in login method che dovresti utilizzare se stai utilizzando il back-end di autenticazione predefinito.

Inoltre, non si controlla se un utente è abilitato o disabilitato.

Ecco una versione diversa del codice, tratto dal example in the documentation:

from django.shortcuts import render, redirect 
from django.contrib.auth import authenticate, login 

def login_view(request): 
    form = LoginForm(request.POST or {}) 
    ctx = {'form': form} 

    if form.is_valid(): 

     username = form.cleaned_data['username'] 
     password = form.cleaned_data['password'] 

     user = authenticate(username, password) 

     if not user: 
     ctx['errors'] = 'Invalid Login' 
     return render(request, 'login.html', ctx) 

     if not user.is_active: 
     ctx['errors'] = 'User is locked' 
     return render(request, 'login.html', ctx) 

     login(request, user) 
     return redirect('home') 

    else: 

     return render(request, 'login.html', ctx) 
Problemi correlati