J'utilise django 1.8.3 et django-allauth 0.21.0 et j'aimerais que l'utilisateur puisse se connecter en utilisant par exemple leur compte Google sans quitter la page. La raison en est qu'il existe des données précieuses provenant de la page à partir de laquelle ils se connectent et qui doivent être publiées après leur connexion. Cela fonctionne déjà bien grâce à la création de compte local, mais j'ai des problèmes avec les réseaux sociaux parce que de nombreux réseaux sociaux dirigent l'utilisateur vers une page distincte pour demander des autorisations, etc. Idéalement, tout cela se passe dans un modal sur ma page, qui se ferme une fois l'authentification réussie.

La seule solution possible (mais pas idéale) à laquelle je puisse penser pour le moment est de forcer la page d'authentification à s'ouvrir dans un autre onglet (par exemple en utilisant target = "_ blank" dans le lien), puis en invitant l'utilisateur à cliquer sur quelque chose en arrière dans la fenêtre d'origine une fois l'authentification terminée dans l'autre onglet.

Cependant, le problème ici est que je ne peux pas penser à un moyen pour la page d'origine de savoir quel compte vient d'être créé par l'utilisateur précédemment anonyme sans qu'il actualise la page, ce qui entraînerait la publication des données importantes qui doivent être publiées. être perdu.

Quelqu'un a-t-il des idées sur la façon dont je pourrais réaliser l'une des deux solutions que j'ai décrites ci-dessus?

2
Gravity Grave 12 juil. 2015 à 20:25

2 réponses

Meilleure réponse

J'ai fini par résoudre ce problème en utilisant le framework de session de Django. Il s'avère que l'ID de session est automatiquement passé par la procédure oauth par django-allauth, donc tout ce qui est stocké dans request.session est accessible de l'autre côté une fois la connexion terminée.

1
Gravity Grave 27 août 2015 à 13:28

Une option est que le formulaire principal affiche l'authentification sociale dans une nouvelle fenêtre puis utilise AJAX pour interroger si l'authentification sociale est terminée. Tant que vous êtes d'accord avec les caractéristiques de performance de ceci (cela martèle légèrement votre serveur), alors c'est probablement la solution la plus simple.

0
Ming 12 juil. 2015 à 17:33