1

Je travaille sur un projet django en utilisant python-social-auth pour authentifier avec facebook. Je cours le serveur de django sur localhost et ai mis en place le facebook avec mon application pour rediriger au http://127.0.0.1:8000/complete/facebook/, qui commence le pipeline de python-social-auth pour authentifier un utilisateur. J'utilise postgres comme base de données.Valeur de session manquante après la redirection avec django python-social-auth

Lorsque cette méthode est appelée et tente d'authentifier, elle ne peut pas trouver d'informations sur la session. De https://github.com/omab/python-social-auth/issues/534, je pense que le cookie sessionid est en cours d'écrasement. Si j'envoie la redirection facebook à une URL différente pour charger une page statique sans authentification, il n'y a pas d'erreur mais je ne m'authentifie pas non plus et je n'obtiens aucune information de facebook.

Comment éviter de remplacer le cookie sessionid - bien sûr, c'est le problème actuel - ou y a-t-il un autre problème qui pourrait me manquer ici?

[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. 

Répondre

3

Cette erreur est due au cookie de session ne pas être enregistrée sur une URL non https. Lors du test sur localhost avec SESSION_COOKIE_SECURE défini sur True dans django, les cookies de session ne persisteront pas entre la redirection et vous obtiendrez cette erreur dans tout type de changement de page où la session sera vérifiée.

SESSION_COOKIE_SECURE = False pour le test et il est tout bon

+0

comment faites-vous dans la production si? – dietbacon

+0

ils ne le font pas, ils ont juste quitté le travail! :) – phaazon

+0

Définissez simplement la valeur sur True si vous souhaitez autoriser uniquement les cookies de session via une connexion https (ce que vous faites probablement). –