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

时间:2013-08-08 19:48:25

标签: django django-views django-allauth

如何从django allauth中禁用中间注销页面。当用户点击我网站上的注销链接时,我希望他立即注销,我想删除此中间页面 Screenshot of signout intermediate page

3 个答案:

答案 0 :(得分:22)

在您的设置中将ACCOUNT_LOGOUT_ON_GET设置为True

另见the documentation

答案 1 :(得分:1)

于2018年12月更新。

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

此外,人们可以添加诸如<img src="https://example.com/account/logout/">之类的链接,您将被注销。因为它会将您注销,所以这不是安全隐患,但是对于您的用户而言,无疑是很烦人的事情。

相反,您应该考虑使用带有CSRF的表单使用POST请求。 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

上查看其配置页面。

答案 2 :(得分:0)

这是保留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()
});