如何在Django allauth中禁用中间注销页面

May*_*ank 14 django django-views django-allauth

如何从django allauth中禁用中间注销页面.当用户点击我网站上的注销链接时,我希望他立即注销,我想删除此中间页面 注销中间页面的屏幕截图

knb*_*nbk 27

设置ACCOUNT_LOGOUT_ON_GETTrue您的设置.

另请参阅文档

  • 这不应该通过 `GET` 来完成,因为任何人都可以 `<img src="https://example.com/account/logout">` 并让你在不知情的情况下退出。/sf/ask/246490331/ (3认同)

Kal*_*ien 6

2018 年 12 月更新。

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

另外,人们可以添加一个链接,例如<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>
Run Code Online (Sandbox Code Playgroud)

就我而言,我只是将其添加到站点标题中,并<button>使用 CSS 使提交看起来像所有其他链接,因此对他们来说感觉相同,但表单将使用 POST 请求。

但是,如果这不是您可以出于任何原因实施的解决方案,请打开您的settings.py文件(或您的主设置文件)并设置:

ACCOUNT_LOGOUT_ON_GET = True 
Run Code Online (Sandbox Code Playgroud)

^ 以上设置将满足您的需求。有关进一步的 Django Allauth 设置,请查看其配置页面https://django-allauth.readthedocs.io/en/latest/configuration.html?highlight=ACCOUNT_LOGOUT_ON_GET