Мое приложение хорошо работало до сих пор, когда все было сделано путем доступа к его публичному IP.Django csrf cookie не установлен для поддомена при доступе в iframe на стороннем сайте
Теперь он добавляется на главный сайт, как app.mainsite.com. Доступно так. Я могу войти и т. Д., Все.
Но мое приложение немного отличается тем, что определенная функция позволяет его пользователям открывать один из своих URL-адресов в iframe на любом стороннем сайте, где скрипты приложения встроены в html, чтобы сделать некоторые приложения конкретными деятельность на тех сторонних сайтах. Теперь все могли видеть новые материалы, которые приложение приносило этим сторонним сайтам, но чтобы изменить некоторые настройки относительно того, как нужно было войти в мое приложение. Если нет, можно было бы перенаправить внутри самого модала, и если логин был успешным, они были бы перенаправлены на страницу редактирования параметров. В принципе, любые запросы на запись с сторонних сайтов потребовали, чтобы владелец сайта был зарегистрирован в нашем приложении. Либо они могут войти в модальный, либо войти в систему с другой вкладки, а затем обновить свой сайт, чтобы иметь возможность войти в представление редактирования.
Проблема в том, что раньше все это работало отлично. Теперь я могу писать сообщение с токенами csrf с сайта app.mainsite.com, но когда он открывается в iframe, он выдает CSRF cookie not set
.
Я проверил вкладку «Ресурсы», и в этом случае csrftoken
в app.mainsite.com не соответствует csrfmiddlewaretoken
в форме. Очевидно, что CSRF не работает.
Как я могу это преодолеть?
Я попытался установить CSRF_COOKIE_DOMAIN='.mainsite.com'
, но это не сработало.
Что я могу сделать?
Я понимаю вашу проблему, но я не уверен, что смогу помочь, не исследуя, как работает ваше приложение. Мне не приходилось обрабатывать запросы POST из iframe, встроенного в сторонний сайт, но похоже, что он должен работать нормально. Я бы начал с рассмотрения 'CsrfViewMiddleware' и выяснил, где именно это происходит: https://github.com/django/django/blob/master/django/middleware/csrf.py#L76 Также' '.mainsite.com'' настройка для всех поддоменов, вы должны установить его: 'CSRF_COOKIE_DOMAIN = 'app.mainsite.com'' –