如何在用户关闭基于 django2.0 的网站上的选项卡或浏览器时强制注销用户

How to forcefully log out a user when user closes tab or browser on website built on django2.0

我使用 Django 的内置登录注销功能,使用 Django 身份验证, 这是用于登录的以下 url 模式 urls.py:

from django.contrib import admin
from django.urls import path, include
from . import views


urlpatterns = [
    path('',views.home),
    path('admin/', admin.site.urls),
    path('users/', include('users.urls')),
    path('users/', include('django.contrib.auth.urls')),
    path('dashboard/', include('dashboard.urls')),

]

我在 setting.py 中添加了以下内容 settings.py:

LOGIN_REDIRECT_URL = 'dashboard:home'
LOGOUT_REDIRECT_URL = 'dashboard:home'

现在我如何检查用户是否关闭了他的浏览器并且他应该被注销? PS:I 制作了我自己的登录和注册 HTML 页面,并制作了我自己的从 AbstractUser 派生的自定义用户

您可以像这样监听 window 或标签页关闭事件。这种方法需要 jQuery 和 JavaScript.

$(document).ready(function(){         
    $(window).on("beforeunload", function(e) {
        $.ajax({
                url: logout_url,
                method: 'GET',
            })
    });
});

只需设置 SESSION_EXPIRE_AT_BROWSER_CLOSE setting to true, so that Django's session cookies are only valid for the length of the browser session.

If SESSION_EXPIRE_AT_BROWSER_CLOSE is set to True, Django will use browser-length cookies – cookies that expire as soon as the user closes their browser. Use this if you want people to have to log in every time they open a browser.