如何从django allauth中禁用中间注销页面。当用户点击我网站上的注销链接时,我希望他立即注销,我想删除此中间页面
答案 0 :(得分:22)
在您的设置中将ACCOUNT_LOGOUT_ON_GET
设置为True
。
答案 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()
});