django-ulogin
django-ulogin copied to clipboard
csrf token missing or incorrect
Сделал все по гайду, спасибо. Понятно и удобно. При переадресации на https://... джанга выдает ошибку "csrf token missing or incorrect". Подскажите, сталкивались ли с этим и как можно победить? При переадресации на http://... ошибки нет. Учитывая, что скрипт ulogin выполняется на внешнем ресурсе, вставить crrf токен я не могу python 3.6.9 django 3.1.5
Здравствуйте,
Чтобы понять что здесь происходит, нужно больше информации. Опишите процесс целиком, что происходит, на какой странице, кто редиректит; если есть исключение, покажите трейс. Укажите настройки, которые меняли. Всё это важно.
Но вероятнее всего, ошибка "csrf token missing or incorrect" происходит тогда, когда пытаются редиректить на то место, куда редиректить не стоит.
Добавил в settings.py:
INSTALLED_APPS = [
...
'django_ulogin'
]
ULOGIN_DISPLAY = 'panel'
ULOGIN_THEME = 'flat'
ULOGIN_REDIRECT_URL = 'https://ig2u2.fvds.ru'
в urls.py
urlpatterns = [
...
path('ulogin/', include('django_ulogin.urls')),
]
в login.html
{% load ulogin_tags %}
{% ulogin_widget %}
путь для просмотра:
https://ig2u2.fvds.ru/login/
Почему-то вспомнился вот этот недавний тикет #46. Почитайте, мне кажется, Вам должно помочь :)
из тикета вычитал для себя 2 вещи:
- прописывание урлов на разных уровнях дало разный результат автору того тикета. Я пробовал и так и так - результат тот же
- ваша прилада "в коробке" сама парсит ответы от ulogin. Я так и предполагал. Поэтому ничего, кроме вышеописанного в своем приложении не писал для этих задач. Модель юзера у меня типовая, так что (как сказано в гайде) все должно работать "из коробки"
Доп. вопрос: юзеры в БД не создаются, по крайней мере я их не вижу через админку джанги
Я имел в виду совет попробовать убрать REDIRECT_URL. Так, интересу для
пробовал изначально) Сайт опубликован локально с пробросом в апаче
Не очень понятен смысл картинки, что она должна отображать?
Давайте попробуем с другой стороны: какие запросы и от кого приходят на джангу? Давайте посмотрим в консоль разработчика. Интересуют запросы и HTTP-методы, которыми они вызываются
Смысл картинки - отобразить то, что мне лень было писать буквами:
- при отключенной переадресации после выполнения авторизации через соцсети django-ulogin возвращает http://127.0.0.1:8099/ulogin/postback/?next=http://127.0.0.1:8099/login/
- Браузер не может отобрать эту строку.
- такой адрес выдается так как сайт опубликован локально, с пробросом http://127.0.0.1:8099 на домен.
по запросам в консоле не очень понял, что смотреть...
при выключенном пробросе пишет то, что на картинке. При включенном - ulogin.js message: open не появляется...
страницы отдаются GET'ом (вижу в cmd). При запуске авторизации - никаких запросов не происходит в обоих случаях
Интересует вкладка Network. Какие урлы запрашиваются и какими методами.
это после успешной аутентификации через гугл
отлично. Давайте теперь посмотрим, что написано в первом запросе. Request headers, response headers
хм... вижу, только общение с яндексом
В списке сетевых запросов кликните на запрос lg2u2.fvds.ru
, где ответ 403. Справа будет информация о том, что произошло, включая заголовки запроса и ответа
То есть получается, что идёт POST-запрос на индексную страницу. А не на ту, которая парсит токен
да, в этом случае прописана переадресация на индекс. А какая страница парсит токен? Я вьюхи никакие не менял. Делал строго по гайду
вставил {% load ulogin_tags %} {% ulogin_widget %} на индекс. Без переадресации браузер пытается открыть путь http://127.0.0.1:8099/ulogin/postback/?next=http://127.0.0.1:8099/, ему не удается. С переадресацией то же, что выше. В общем, не проблема расположения виджета, проблема в чем-то другом....
А какая страница парсит токен?
Вот эта. Как раз в вышеупомянутом #46 это обсуждалось
Запросы от юлогина должны идти на эту страницу. А она сама в случае успешного логина сделает редирект на страницу, указанную в ?next=
В settings нужно добавить: ULOGIN_REDIRECT_URL = 'https://ig2u2.fvds.ru/ulogin/postback/'
спасибо! Можно закрывать