Mon application a bien fonctionné jusqu'à présent, lorsque tout a été fait en accédant à son adresse IP publique.Le cookie Django csrf n'est pas défini pour le sous-domaine lorsqu'il est accédé en iframe sur un site tiers
Maintenant, il est ajouté au site principal, en tant que app.mainsite.com. C'est accessible comme ça. Je peux me connecter, etc, tout.
Mais mon application est un peu spéciale en cela, une certaine fonctionnalité permet à ses utilisateurs d'ouvrir l'une de ses URL dans un iframe sur un site tiers où les scripts de l'application sont intégrés dans html, pour faire une application spécifique activité sur ces sites tiers. Maintenant, tout le monde pouvait voir les nouveautés apportées par l'application à ces sites tiers, mais pour modifier certains paramètres, il fallait être connecté à mon application. Si ce n'est pas le cas, on serait redirigé à l'intérieur du modal lui-même, et si la connexion était réussie, ils seraient redirigés vers la page d'édition des paramètres. Fondamentalement, toutes les demandes d'écriture à partir des sites tiers, a demandé au propriétaire du site d'être connecté à notre application. Soit ils peuvent se connecter à l'intérieur du modal, soit se connecter à partir d'un autre onglet, puis actualiser leur site pour pouvoir accéder à la vue d'édition.
Le problème est, tout à l'heure, tout a parfaitement fonctionné. Maintenant, je peux faire un post de formulaire avec des jetons csrf de app.mainsite.com, mais quand il est ouvert dans l'iframe, il lance CSRF cookie not set
. J'ai vérifié l'onglet Ressources, et en dessous, le csrftoken
dans app.mainsite.com ne correspond pas au csrfmiddlewaretoken
dans le formulaire. Évidemment, ainsi, CSRF échoue.
Comment puis-je surmonter cela?
J'ai essayé de régler CSRF_COOKIE_DOMAIN='.mainsite.com'
mais cela n'a pas fonctionné.
Que puis-je faire?
Je comprends votre problème, mais je ne suis pas sûr de pouvoir vous aider sans examiner comment votre application fonctionne exactement. Je n'ai pas eu à faire face à des requêtes POST provenant d'un iframe intégré dans un site tiers, mais il semble que cela devrait fonctionner correctement. Je voudrais commencer par passer par 'CsrfViewMiddleware' et d'enquêter là où il échoue exactement: https://github.com/django/django/blob/master/django/middleware/csrf.py#L76 Aussi' '.mainsite.com'' Le paramètre est pour tous les sous-domaines, vous devez le définir comme suit: 'CSRF_COOKIE_DOMAIN = 'app.mainsite.com'' –