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