diff --git a/backend/dvadmin/system/models.py b/backend/dvadmin/system/models.py index c70f2561b6ff5d6a007d996b1fdc688c367a68f7..ca97fe214024af9ca66fcbf03e7d8f1133064f73 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 0815e9eee873c805d2ef01d9036557066730481a..37708c6f426602fee4b15e3bef680b34767a9403 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 7f835567d42db465daee34297dc168dff6da7433..4502a753f8cf2cc47d8b71446258ee78aa4e9885 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 0000000000000000000000000000000000000000..1b0c0c68b86bb7978de4a408d0504d046205373c --- /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 0f4d9c86186777cfc8bb71bd38e7e01a9ea8f874..897ddc4121cf00fabb1900f0be02265ef9c37814 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 0000000000000000000000000000000000000000..5e2de5977f664e6468533432de28dbdc4b521635 --- /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; +} +