如何在Django allauth中禁用中间签出页面
如何从django allauth禁用中间签出页面。当用户点击我网站上的注销链接时,我希望他立即注销,我希望删除这个中间页面如何在Django allauth中禁用中间签出页面,django,django-views,django-allauth,Django,Django Views,Django Allauth,如何从django allauth禁用中间签出页面。当用户点击我网站上的注销链接时,我希望他立即注销,我希望删除这个中间页面 在设置中将“获取”时的帐户注销设置为True 另请参见2018年12月更新的 使用GET请求可能是个坏主意,因为浏览器会从URL栏预取URL。Chrome(截至目前)在这方面相当糟糕;它将发送一个GET请求到它认为在URL栏中键入时您会点击enter的页面 另外,人们可以添加一个链接,如,您将被注销。这不是一个安全风险,因为它会让你注销,但它肯定会让你的用户感到恼火 相反
在设置中将“获取”时的
帐户注销设置为True
另请参见2018年12月更新的
使用GET请求可能是个坏主意,因为浏览器会从URL栏预取URL。Chrome(截至目前)在这方面相当糟糕;它将发送一个GET
请求到它认为在URL栏中键入时您会点击enter
的页面
另外,人们可以添加一个链接,如
,您将被注销。这不是一个安全风险,因为它会让你注销,但它肯定会让你的用户感到恼火
相反,您应该考虑使用带有CSRF的表单使用<代码> POST <代码>请求。Django Allauth已经有了这个。以下是中间签出页面中的
:
<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>
^上述设置将满足您的需要。有关Django Allauth的进一步设置,请查看其配置页面,网址为,如果您不想用类似的东西来设计表单按钮的样式,这里有另一个保存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>
这不应该在GET
上完成,因为任何人都可以
让您在不知情的情况下注销。在不知不觉中注销有什么不对?如果有什么区别的话,那应该是一个特性,而不是bug=)Kalob和Adam的答案更有用。就连allauth doc都说:“GET并不是为了修改服务器状态而设计的,在这种情况下,它可能是危险的。”用一篇博文就可以很容易地做到这一点。
<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()
});