【问题标题】:How to disable intermediate signout page in Django allauth如何在 Django allauth 中禁用中间注销页面
【发布时间】:2013-08-10 16:25:24
【问题描述】:

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

【问题讨论】:

    标签: django django-views django-allauth


    【解决方案1】:

    如果您不想用类似这样的方式来设置表单按钮的样式,这里还有一个保存 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()
    });
    

    【讨论】:

      【解决方案2】:

      于 2018 年 12 月更新。

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

      另外,人们可以添加一个链接,例如&lt;img src="https://example.com/account/logout/"&gt;,然后您将被注销。这不是安全风险,因为它会让您退出,但肯定会让您的用户感到烦恼。

      相反,您应该考虑使用带有 CSRF 的表单使用 POST 请求。 Django Allauth 已经附带了这个。这是中间注销页面中的&lt;form&gt;

      <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>
      

      在我的例子中,我只是将它添加到站点标题中,并使提交 &lt;button&gt; 看起来像使用 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

      【讨论】:

        【解决方案3】:

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

        另见the documentation

        【讨论】:

        • 这不应该在GET 上完成,因为任何人都可以&lt;img src="https://example.com/account/logout"&gt; 让你在你不知道的情况下退出。 stackoverflow.com/questions/3521290/logout-get-or-post
        • 在不知不觉中退出有什么问题?如果有的话,那应该是一个特性,而不是一个错误 =)
        • Kalob 和 Adam 的回答更有用。甚至 allauth doc 都说——“GET 不是为了修改服务器状态而设计的,在这种情况下它可能很危险。”使用帖子很容易做到这一点。
        猜你喜欢
        • 2016-02-09
        • 2013-06-06
        • 2014-10-06
        • 2023-03-18
        • 1970-01-01
        • 2013-10-05
        • 2020-05-06
        • 2014-04-07
        • 1970-01-01
        相关资源
        最近更新 更多