1

Ich arbeite an einem Django-Projekt mit Python-Social-Auth, um die Authentifizierung mit Facebook zu tun. Ich lasse den django Server auf localhost laufen und lasse Facebook mit meiner Anwendung umleiten, um zu http://127.0.0.1:8000/complete/facebook/ umzuleiten, das die python-social-auth Rohrleitung beginnt, um einen Benutzer zu authentifizieren. Ich benutze Postgres als meine Datenbank.Session-Wert fehlt nach Umleitung mit Django Python-Social-Auth

Wenn diese Methode aufgerufen wird und versucht, sich zu authentifizieren, kann sie keine Informationen zur Sitzung finden. Von https://github.com/omab/python-social-auth/issues/534 glaube ich, dass der Sitzungs-Cookie überschrieben wird. Wenn ich die Facebook-Weiterleitung an eine andere URL sende, um eine statische Seite ohne Authentifizierung zu laden, gibt es keinen Fehler, aber ich authentifiziere mich auch nicht und bekomme keine Informationen von Facebook.

Wie würde ich das sessionid-Cookie nicht überschreiben - wenn das natürlich das eigentliche Problem ist - oder gibt es ein anderes Problem, das mir hier vielleicht fehlt?

[03/Jun/2016 05:19:58] "GET /login/facebook/?next=/lithium-web/ HTTP/1.1" 302 0 
Internal Server Error: /complete/facebook/ 
Traceback (most recent call last): 
    File "/Users/mac/Desktop/lithium-web/lib/python2.7/site-packages/django/core/handlers/base.py", line 149, in get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "/Users/mac/Desktop/lithium-web/lib/python2.7/site-packages/django/core/handlers/base.py", line 147, in get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/Users/mac/Desktop/lithium-web/lib/python2.7/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func 
    response = view_func(request, *args, **kwargs) 
    File "/Users/mac/Desktop/lithium-web/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view 
    return view_func(*args, **kwargs) 
    File "/Users/mac/Desktop/lithium-web/lib/python2.7/site-packages/social/apps/django_app/utils.py", line 51, in wrapper 
    return func(request, backend, *args, **kwargs) 
    File "/Users/mac/Desktop/lithium-web/lib/python2.7/site-packages/social/apps/django_app/views.py", line 28, in complete 
    redirect_name=REDIRECT_FIELD_NAME, *args, **kwargs) 
    File "/Users/mac/Desktop/lithium-web/lib/python2.7/site-packages/social/actions.py", line 43, in do_complete 
    user = backend.complete(user=user, *args, **kwargs) 
    File "/Users/mac/Desktop/lithium-web/lib/python2.7/site-packages/social/backends/base.py", line 41, in complete 
    return self.auth_complete(*args, **kwargs) 
    File "/Users/mac/Desktop/lithium-web/lib/python2.7/site-packages/social/utils.py", line 229, in wrapper 
    return func(*args, **kwargs) 
    File "/Users/mac/Desktop/lithium-web/lib/python2.7/site-packages/social/backends/facebook.py", line 71, in auth_complete 
    state = self.validate_state() 
    File "/Users/mac/Desktop/lithium-web/lib/python2.7/site-packages/social/backends/oauth.py", line 88, in validate_state 
    raise AuthStateMissing(self, 'state') 
AuthStateMissing: Session value state missing. 

Antwort

3

Dieser Fehler war darauf zurückzuführen, dass der Sitzungscookie nicht über eine Nicht-https-URL gespeichert wurde. Beim Testen auf localhost mit SESSION_COOKIE_SECURE, das in Django auf "True" gesetzt ist, bleiben die Sitzungscookies zwischen der Weiterleitung nicht bestehen und Sie erhalten diesen Fehler bei jeder Art von Seitenänderung, bei der die Sitzung überprüft wird.

SESSION_COOKIE_SECURE = False für die Prüfung und es ist alles gut

+0

, wie Sie es tun, obwohl in der Produktion? – dietbacon

+0

sie nicht, sie haben nur den Job verlassen! :) – phaazon

+0

Setzen Sie einfach den Wert auf True, wenn Sie nur Session-Cookies über https-Verbindung zulassen wollen (was Sie wahrscheinlich tun) –