Как отключить промежуточную страницу выписки в Django allauth

Как отключить промежуточную страницу выписки из django allauth. Когда пользователь нажимает на ссылку на моем сайте, я хочу, чтобы он сразу же вышел из системы, я хочу удалить эту промежуточную страницу Screenshot of signout intermediate page

Ответ 1

Установите в настройках ACCOUNT_LOGOUT_ON_GET - True.

Также см. документацию

Ответ 2

Обновлено за декабрь 2018 года.

Использование запроса GET, вероятно, является плохой идеей из-за того, что браузеры предварительно выбирают URL-адреса из строки URL. Chrome (на данный момент) довольно плох для этого; он отправит запрос GET на страницы, которые, по его мнению, вы нажмете при enter при вводе в строке URL.

Кроме того, пользователи могут добавить ссылку, например <img src="https://example.com/account/logout/"> и вы выйдете из системы. Это не угроза безопасности, поскольку это выводит вас из системы, но это, безусловно, раздражает ваших пользователей.

Вместо этого вам следует рассмотреть возможность использования запроса POST используя форму с CSRF. Джанго Аллах уже приходит с этим. Вот <form> со страницы промежуточного выхода:

<form method="post" action="{% url 'account_logout' %}">
  {% csrf_token %}
  {% if redirect_field_value %}
    <input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}"/>
  {% endif %}
  <button class="STYLE_ME" type="submit">Logout</button>
</form>

В моем случае я просто добавил это в заголовок сайта и сделал кнопку <button> submit <button> похожей на любую другую ссылку, используя CSS, поэтому он чувствует себя так же, но форма использует запрос POST.

Но если это не решение, которое вы можете реализовать по какой-либо причине, откройте ваш файл settings.py (или ваш основной файл настроек) и установите:

ACCOUNT_LOGOUT_ON_GET = True 

^ Приведенная выше настройка будет делать то, что вам нужно. Дополнительные настройки Django Allauth можно найти на странице конфигурации по адресу https://django-allauth.readthedocs.io/en/latest/configuration.html?highlight=ACCOUNT_LOGOUT_ON_GET.

Ответ 3

Вот еще один ярлык для сохранения POST-запроса, если вы не хотите связываться со стилем кнопки формы, например:

Скрыть форму:

<form style='display: none;' method="post" action="{% url 'account_logout' %}">
  {% csrf_token %}
  <input type="hidden" name="next" value="/redirect_target/"/>
  <button id="signOutBtn" type="submit">Logout</button>
</form>

Отправить с событием click, прикрепленным к любому элементу, который вы уже создали:

$(document).on('click', '#signOutLink', function() {
    $('#signOutBtn').click()
});