From aba0f950b701310a73720de1fb31b295c943c58f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8C=BF=E5=B0=8F=E5=A4=A9?= <1638245306@qq.com> Date: Tue, 28 Mar 2023 21:23:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=8F=98=E5=8C=96:=20?= =?UTF-8?q?=E5=8A=A0=E5=85=A5=E6=B5=8F=E8=A7=88=E5=99=A8=E5=8D=95=E7=82=B9?= =?UTF-8?q?=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/fixtures/init_systemconfig.json | 19 +++++++++++++++++ backend/dvadmin/system/views/login.py | 21 ++++++++++++------- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/backend/dvadmin/system/fixtures/init_systemconfig.json b/backend/dvadmin/system/fixtures/init_systemconfig.json index ed4c967..090a588 100644 --- a/backend/dvadmin/system/fixtures/init_systemconfig.json +++ b/backend/dvadmin/system/fixtures/init_systemconfig.json @@ -49,6 +49,25 @@ "placeholder": "请输入默认密码", "setting": null, "children": [] + }, + { + "parent": 10, + "title": "开启单点登录", + "key": "single_login", + "value": true, + "sort": 1, + "status": true, + "data_options": null, + "form_item_type": 9, + "rule": [ + { + "message": "必填项不能为空", + "required": true + } + ], + "placeholder": "请选择", + "setting": null, + "children": [] } ] }, diff --git a/backend/dvadmin/system/views/login.py b/backend/dvadmin/system/views/login.py index aad0563..124f26b 100644 --- a/backend/dvadmin/system/views/login.py +++ b/backend/dvadmin/system/views/login.py @@ -109,14 +109,19 @@ class LoginSerializer(TokenObtainPairSerializer): request.user = self.user # 记录登录日志 save_login_log(request=request) - # 将之前登录用户的token加入黑名单 - user = Users.objects.filter(id=self.user.id).values('last_token').first() - last_token = user.get('last_token') - if last_token: - token = RefreshToken(last_token) - token.blacklist() - # 将最新的token保存到用户表 - Users.objects.filter(id=self.user.id).update(last_token=data.get('refresh')) + # 是否开启单点登录 + if dispatch.get_system_config_values("base.single_login"): + # 将之前登录用户的token加入黑名单 + user = Users.objects.filter(id=self.user.id).values('last_token').first() + last_token = user.get('last_token') + if last_token: + try: + token = RefreshToken(last_token) + token.blacklist() + except: + pass + # 将最新的token保存到用户表 + Users.objects.filter(id=self.user.id).update(last_token=data.get('refresh')) return {"code": 2000, "msg": "请求成功", "data": data} class CustomTokenRefreshView(TokenRefreshView):