2017-09-22 13 views
0

ユーザーが私のアプリケーションにログオンしているときにfirst cookieをDjangoに設定しようとしています。ユーザーがログインしている場合は 、テンプレートはよく表示されますが、命名された私のアプリケーションではなしクッキー:私は私のスクリプトで何かを逃したログイン機能付きDjango Cookie

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 

Cookie

My機能は次のようになりますか?

答えて

2

これは、Cookieの使用方法ではありません。

あなたのログインビューでは、HTTP応答を返すGEDCookieという別のビューを呼び出しています。しかし、クッキーを設定するユーザーにその応答を直接返す代わりに、何らかの理由でそれをテンプレートに挿入しようとしています。それは意味をなさない。

ログインビューでクッキーを設定する場合は、ユーザーに返信する際にクッキーを設定する必要があります。

成功したログイン(またはその他の投稿)後は、常にをリダイレクトし、テンプレートを直接表示しないように注意してください。したがって:

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

最後に、ほとんどの場合、ここではクッキーはほとんど必要ありません。現在のユーザーに関連するデータを保存する場合は、セッションを使用します。

1

実際のレスポンスにクッキーを添付していないことがはっきりとわかるので、それを問題となるレンダー機能のコンテキストとして渡しています。

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

ありがとうございます!それはあなたの答えでも動作します:) – Deadpool

関連する問題