From 45dcda0cc093ac340d722280652ee6dbc5cbf6ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=A8=E5=AD=90-=E6=9D=8E?= <1537080775@qq.com> Date: Tue, 6 May 2025 05:49:02 +0000 Subject: [PATCH] =?UTF-8?q?=E5=85=BC=E5=AE=B9OAuth2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 木子-李 <1537080775@qq.com> --- backend/dvadmin/system/models.py | 8 +- web/src/router/index.ts | 12 ++ web/src/views/system/login/api.ts | 7 + .../views/system/login/component/oauth2.vue | 139 ++++++++++++++++++ web/src/views/system/login/index.vue | 6 +- web/src/views/system/login/types.ts | 8 + 6 files changed, 178 insertions(+), 2 deletions(-) create mode 100644 web/src/views/system/login/component/oauth2.vue create mode 100644 web/src/views/system/login/types.ts diff --git a/backend/dvadmin/system/models.py b/backend/dvadmin/system/models.py index c70f2561..ca97fe21 100644 --- a/backend/dvadmin/system/models.py +++ b/backend/dvadmin/system/models.py @@ -77,7 +77,13 @@ class Users(CoreModel, AbstractUser): objects = CustomUserManager() def set_password(self, raw_password): - super().set_password(hashlib.md5(raw_password.encode(encoding="UTF-8")).hexdigest()) + if raw_password: + super().set_password(hashlib.md5(raw_password.encode(encoding="UTF-8")).hexdigest()) + + def save(self, *args, **kwargs): + if self.name == "": + self.name = self.username + super().save(*args, **kwargs) class Meta: db_table = table_prefix + "system_users" diff --git a/web/src/router/index.ts b/web/src/router/index.ts index 0815e9ee..37708c6f 100644 --- a/web/src/router/index.ts +++ b/web/src/router/index.ts @@ -98,10 +98,22 @@ export function formatTwoStageRoutes(arr: any) { const frameOutRoutes = staticRoutes.map(item => item.path) +const checkToken = ()=>{ + const urlParams = new URLSearchParams(window.location.search); + const _oauth2_token = urlParams.get('_oauth2_token'); + if (_oauth2_token) { + Session.set('token', _oauth2_token); + const cleanUrl = window.location.href.split('?')[0]; + window.history.replaceState({}, '', cleanUrl); + useUserInfo(pinia).setUserInfos(); + + } +} // 路由加载前 router.beforeEach(async (to, from, next) => { // 检查浏览器本地版本与线上版本是否一致,判断是否需要刷新页面进行更新 await checkVersion() + checkToken() NProgress.configure({showSpinner: false}); if (to.meta.title) NProgress.start(); const token = Session.get('token'); diff --git a/web/src/views/system/login/api.ts b/web/src/views/system/login/api.ts index 7f835567..4502a753 100644 --- a/web/src/views/system/login/api.ts +++ b/web/src/views/system/login/api.ts @@ -28,3 +28,10 @@ export function getUserInfo() { method: 'get', }); } + +export function getBackends() { + return request({ + url: '/api/dvadmin3_social_oauth2/backend/get_login_backend/', + method: 'get', + }); +} \ No newline at end of file diff --git a/web/src/views/system/login/component/oauth2.vue b/web/src/views/system/login/component/oauth2.vue new file mode 100644 index 00000000..1b0c0c68 --- /dev/null +++ b/web/src/views/system/login/component/oauth2.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/web/src/views/system/login/index.vue b/web/src/views/system/login/index.vue index 0f4d9c86..897ddc41 100644 --- a/web/src/views/system/login/index.vue +++ b/web/src/views/system/login/index.vue @@ -34,7 +34,9 @@ --> - + + + @@ -81,6 +83,8 @@ const Account = defineAsyncComponent(() => import('/@/views/system/login/compone const Mobile = defineAsyncComponent(() => import('/@/views/system/login/component/mobile.vue')); const Scan = defineAsyncComponent(() => import('/@/views/system/login/component/scan.vue')); const ChangePwd = defineAsyncComponent(() => import('/@/views/system/login/component/changePwd.vue')); +const OAuth2 = defineAsyncComponent(() => import('/@/views/system/login/component/oauth2.vue')); + import _ from "lodash-es"; import {useUserInfo} from "/@/stores/userInfo"; const { userInfos } = storeToRefs(useUserInfo()); diff --git a/web/src/views/system/login/types.ts b/web/src/views/system/login/types.ts new file mode 100644 index 00000000..5e2de597 --- /dev/null +++ b/web/src/views/system/login/types.ts @@ -0,0 +1,8 @@ + +export interface OAuth2Backend { + app_name: string; + backend_name: string; + icon: string; + authentication_url: string; +} + -- Gitee