2016-06-29 5 views
0

Ich bin neu in Djangos Sitzungen und habe versucht, einen Login-Cookie für meine Website zu erstellen. Benutzer auf meiner Website registrieren über soziale Website (Dampf in diesem Fall), Dafür habe ich verschiedene Funktionen: Index Ansicht, Login, LoginProcess.Django: Cookies richtig einstellen

Information:

Index Ansicht ist eine Homepage (127.0.0.1), Login Funktion Benutzer LoginProcess, in diesem Prozess leitet, i ein Cookie gesetzt haben.

request.set_cookie(key='logged', value=True) 

request ist beispielsweise, dass alle drei Funktionen in meinem Code, ich habe die in Schlüssel auf True angemeldet gesetzt, die von Index-Funktion gelesen werden sollte.

Index Funktion:

def index(request): 
    if request.COOKIES.get('logged') == True: 
     return HttpResponse("1 - User is logged in") 
    else: 
     return HttpResponse("0 - User is not logged in) 

Leider ist dies bis bringt Aussage 0 (Benutzer ist nicht angemeldet), auch wenn ich auf der Website angemeldet bin, ist der Wert der angemeldeten Schlüssel None.


Problem:

Index Funktion kann nicht erkennen, dass logged Cookies in LoginProcess Funktion registriert wurden.

Frage:

Ich werde auch die Benutzername in Cookies speichern, so dass System, welche Benutzer Daten sollten sie verwenden bestimmen können, ich weiß, dass es für die clientseitige Cookies sehr schlecht ist, was der beste Weg ist es zu tun?

Wie könnte ich dieses Problem beheben? Gibt es eine bessere Möglichkeit, Anmeldecookies einzurichten? Gibt es noch eine andere Möglichkeit, die Login-Sitzung einzurichten?

Also im Grunde, wie könnte ich Cookie in der ersten Funktion setzen und seinen Wert von der zweiten Funktion bekommen?

Hinweis: Es gibt kein Problem mit der Authentifizierung, ist mein Hauptanliegen, Cookies ordnungsgemäß zu setzen.

+1

Django als ziemlich vollständiges und erweiterbares Authentifizierungssystem ('contrib.auth'), warum es nicht verwenden, anstatt das Rad neu zu erfinden? –

+0

@brunodesthuilliers wie ich in meinem Beitrag erwähnte, verwende ich soziale Authentifizierung, Custom made System gibt mir mehr Funktionen und ist insgesamt einfacher für mich. – ShellRox

+0

Wie schon erwähnt 'contrib.auth' _ist erweiterbar_ und es gibt Beispiele für soziale Auth-Integration (sogar einige Pluggable-Apps FWIW). Bedenken Sie auch, dass jede Pluggable-App, die Auth und/oder Berechtigungen benötigt, sehr wahrscheinlich (das ist eine Untertreibung) von 'contrib.auth' abhängig ist. Aber wenn Sie wirklich Schmerzen lieben und es vorziehen, Ihre eigenen zu rollen, können Sie immer noch sehen, wie 'contrib.auth' diesen Teil des Problems behandelt. –

Antwort

1

Vielleicht lese ich immer noch falsch, aber es ist unmöglich, den Wert für den Cookie einer Anfrage festzulegen.

'WSGIRequest' object has no attribute 'set_cookie' 

aber wenn ich nehme an, Sie response.set_cookie(key='logged', value=True) gemeint (beachten Sie response), dann funktioniert dies für mich.

# sets the cookie if not set. 
print request.COOKIES 
if request.COOKIES.get('logged'): 
    return HttpResponse("1 - User is logged in") 
else: 
    response = HttpResponse("0 - User is not logged in") 
    response.set_cookie('logged', True) 
    return response 
+0

Ich hatte 'Anfrage' als Instanz aller Funktionen, es hat funktioniert, aber ich kenne nicht den Hauptpunkt davon, danke für die Korrektur mich. Aber in diesem Fall setze ich Cookie in eine andere Ansichtsfunktion ('LoginProcess') und erhalte den Wert von der 'Index'-Ansichtsfunktion. – ShellRox

+0

Liegt das daran, dass Sie '== True' aktiviert haben, während der Cookie als' 'True'' gesetzt ist, weil Cookies Strings sind? (In meinem Beispiel wird nicht nach einem booleschen Wert gesucht.) – Brian

+0

meins hat und gab die Anweisung von else, 'request.COOKIES.get ('logged')' enthält in diesem Fall 'None'. ist es möglich, den Cookie in der ersten Funktion zu setzen und von der Sekunde darauf zuzugreifen? – ShellRox

0

Ich bin nicht entirily sicher über Ihre Frage, aber wenn Sie wollen neben der Sitzungs_ID ein Cookie setzen, wenn der Benutzer in Sie auch angemeldet ist Middleware nutzen können. Wie auch hier vorgeschlagen:

How to set a login cookie in django?

Verwandte Themen