2017-09-22 14 views
0

J'essaie de définir mon first cookie avec Django lorsque les utilisateurs sont connectés à mon application. Lorsque l'utilisateur est connecté, le modèle est bien affiché, mais aucun cookie dans mon application qui est nommé: CookieDjango Cookie avec fonction de connexion

Ma fonction ressemble:

def Login(request): 
    error = False 

    if request.method == "POST": 
     form = ConnexionForm(request.POST) 
     if form.is_valid(): 
      username = form.cleaned_data["username"] 
      password = form.cleaned_data["password"] 
      user = authenticate(username=username, password=password) 
      if user: 
       login(request, user)  
       toto = GEDCookie(request)        
       return render(request, 'Home_Homepage.html', {'toto':toto}) 

      else: 
       error = True 

    else: 
     form = ConnexionForm() 

    return render(request, 'Authentication_Homepage.html', locals()) 

@csrf_exempt 
def GEDCookie(request): 

    SID = Logger.login("test", "10test") 
    response = HttpResponse("Cookie") 
    response.set_cookie('Cookie', SID, max_age=None) 

    return response 

je manqué quelque chose dans mon script?

Répondre

2

Ce n'est pas comme ça que vous utilisez des cookies.

Dans votre vue Connexion, vous appelez une vue distincte - GEDCookie qui renvoie une réponse HTTP. Mais au lieu de renvoyer cette réponse directement à l'utilisateur, ce qui définirait le cookie, vous essayez, pour une raison quelconque, de l'insérer dans un modèle. Cela n'a pas de sens.

Si vous souhaitez définir un cookie dans votre vue de connexion, vous devez le faire sur la réponse que vous renvoyez à l'utilisateur.

Notez également qu'après une connexion réussie (ou un autre message), vous devez toujours rediriger, n'afficher pas un modèle directement. Donc:

if user: 
    login(request, user)  
    response = redirect('home') 
    response.set_cookie('whatever') 
    return response 

Enfin, vous n'avez certainement pas besoin d'un cookie ici dans tous les cas. Si vous souhaitez stocker des données liées à l'utilisateur actuel, utilisez la session.

1

Comme vous pouvez clairement voir que vous n'attachez pas votre cookie à votre réponse réelle, vous le passez comme contexte dans la fonction de rendu qui est un problème.

def Login(request): 
    error = False 

    if request.method == "POST": 
     form = ConnexionForm(request.POST) 
     if form.is_valid(): 
      username = form.cleaned_data["username"] 
      password = form.cleaned_data["password"] 
      user = authenticate(username=username, password=password) 
      if user: 
       login(request, user) 
       SID = Logger.login("test", "10test") 
       response = render(request, 'Home_Homepage.html', {}) 
       response.set_cookie('Cookie', SID, max_age=None) 
       return response 

      else: 
       error = True 

    else: 
     form = ConnexionForm() 

    return render(request, 'Authentication_Homepage.html', locals()) 
+0

Merci beaucoup! Cela fonctionne avec votre réponse aussi :) – Deadpool