25

How to disable the intermediate signout page from django allauth. When the user clicks on the signout link on my site I want him to logout right away, I want to remove this intermediate page Screenshot of signout intermediate page

4

3 回答 3

44

在您的设置中设置ACCOUNT_LOGOUT_ON_GETTrue

另请参阅文档

于 2013-08-08T19:59:48.243 回答
7

更新于 2018 年 12 月。

由于浏览器会从 URL 栏中预取 url,因此使用 GET 请求可能不是一个好主意。Chrome(截至目前)对此非常不利;它会向它认为您在 URL 栏中输入时会点击的页面发送GET请求。enter

另外,人们可以添加一个链接,例如<img src="https://example.com/account/logout/">您将被注销。这不是安全风险,因为它会让您退出,但对于您的用户来说肯定很烦人。

相反,您应该考虑使用POST带有 CSRF 的表单的请求。Django Allauth 已经附带了这个。这是<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>使用 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查看他们的配置页面

于 2018-12-27T18:08:57.703 回答
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>

使用附加到您已经设置样式的任何元素的单击事件提交:

$(document).on('click', '#signOutLink', function() {
    $('#signOutBtn').click()
});
于 2019-07-25T04:37:22.297 回答