yuang-framework-ui-common 1.0.95 → 1.0.97
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/utils/ssoUtils.ts +60 -18
- package/package.json +1 -1
- package/src/router/index.ts +4 -18
- package/src/views/sso/client/sso-auth/index.vue +0 -35
package/lib/utils/ssoUtils.ts
CHANGED
|
@@ -5,7 +5,8 @@ import { isFullUrl } from './urlUtils';
|
|
|
5
5
|
import { getLocalStorageItem, setLocalStorageItem, removeLocalStorageItem } from './storageUtils';
|
|
6
6
|
import { application } from '../config/applicationConfig';
|
|
7
7
|
import { getIsDebug } from '../utils/htmlUtils';
|
|
8
|
-
|
|
8
|
+
import { http} from '../config/httpConfig';
|
|
9
|
+
import { removeParameter } from '../utils/urlUtils';
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* 获取sso登录地址
|
|
@@ -78,25 +79,65 @@ const getSsoLogoutUrl = (ssoRedirectUrl = '') => {
|
|
|
78
79
|
}
|
|
79
80
|
return ssoLogoutUrl;
|
|
80
81
|
}
|
|
82
|
+
//
|
|
83
|
+
// /**
|
|
84
|
+
// * 获取sso认证路由路径
|
|
85
|
+
// * @param ssoRedirectRoutePath
|
|
86
|
+
// */
|
|
87
|
+
// const getSsoAuthRoutePath = (ssoRedirectRoutePath = '') => {
|
|
88
|
+
// if(getIsDebug()) {
|
|
89
|
+
// debugger;
|
|
90
|
+
// }
|
|
91
|
+
// let ssoAuthRoutePath = '/sso/client/sso-auth/index';
|
|
92
|
+
// if (!ssoRedirectRoutePath) {
|
|
93
|
+
// ssoAuthRoutePath += `?ssoRedirectRoutePath=${encodeURIComponent('/sso/client/sso-auth/auth-success')}`;
|
|
94
|
+
// } else {
|
|
95
|
+
// ssoAuthRoutePath += `?ssoRedirectRoutePath=${encodeURIComponent(ssoRedirectRoutePath)}`;
|
|
96
|
+
// }
|
|
97
|
+
// if(getIsDebug()) {
|
|
98
|
+
// console.log('ssoAuthRoutePath', ssoAuthRoutePath);
|
|
99
|
+
// }
|
|
100
|
+
// return ssoAuthRoutePath;
|
|
101
|
+
// }
|
|
81
102
|
|
|
82
103
|
/**
|
|
83
|
-
*
|
|
84
|
-
* @param
|
|
104
|
+
* 处理sso认证
|
|
105
|
+
* @param to
|
|
106
|
+
* @param from
|
|
85
107
|
*/
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
108
|
+
const handleSsoAuth = (to : any, from : any) => {
|
|
109
|
+
from;
|
|
110
|
+
return new Promise((resolve, reject) => {
|
|
111
|
+
// 已登录,直接放行
|
|
112
|
+
if (getSsoAccessToken()) {
|
|
113
|
+
return resolve({result: true});
|
|
114
|
+
}
|
|
115
|
+
// 免登录路由,直接放行
|
|
116
|
+
if (to.meta?.isSsoClientExcluded) {
|
|
117
|
+
return resolve({result: true});
|
|
118
|
+
}
|
|
119
|
+
// 无认证码,跳转到 SSO 授权页(window.location 跳转后 return false 终止路由)
|
|
120
|
+
const ssoAuthCode = to.query.ssoAuthCode;
|
|
121
|
+
if (!ssoAuthCode) {
|
|
122
|
+
window.location.href = getSsoAuthUrl(window.location.href) || '';
|
|
123
|
+
// 这里一定要return,不return还是会继续执行下面的代码
|
|
124
|
+
return resolve({result: false});
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
http.get(`/sso-api/client/sso-auth/getSsoAccessToken`, { params: { ssoAuthCode } }).then(res =>{
|
|
128
|
+
setSsoAccessToken(res.data.data);
|
|
129
|
+
// 处理重定向路径
|
|
130
|
+
let fullPath = to.fullPath;
|
|
131
|
+
fullPath = removeParameter('ssoAuthCode', fullPath);
|
|
132
|
+
// 返回重定向路径
|
|
133
|
+
return resolve({result: true, path: fullPath });
|
|
134
|
+
});
|
|
135
|
+
} catch (error) {
|
|
136
|
+
console.error('SSO 获取 AccessToken 失败:', error);
|
|
137
|
+
// 失败后跳转到登录页(可根据业务调整为无权限页)
|
|
138
|
+
return reject({result: false, path:'/sso/client/sso-login/index'});
|
|
139
|
+
}
|
|
140
|
+
});
|
|
100
141
|
}
|
|
101
142
|
|
|
102
143
|
/**
|
|
@@ -216,7 +257,8 @@ export {
|
|
|
216
257
|
getSsoLoginUrl,
|
|
217
258
|
getSsoAuthUrl,
|
|
218
259
|
getSsoLogoutUrl,
|
|
219
|
-
getSsoAuthRoutePath,
|
|
260
|
+
// getSsoAuthRoutePath,
|
|
261
|
+
handleSsoAuth,
|
|
220
262
|
|
|
221
263
|
getSsoEncrypt,
|
|
222
264
|
getSsoEncryptList,
|
package/package.json
CHANGED
package/src/router/index.ts
CHANGED
|
@@ -1,20 +1,12 @@
|
|
|
1
1
|
import {createRouter, createWebHistory} from 'vue-router'
|
|
2
2
|
import {getExceptionRoutes} from '../../lib/utils/routerUtils'
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import { handleSsoAuth } from '../../lib/utils/ssoUtils';
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
const router = createRouter({
|
|
8
8
|
history: createWebHistory(import.meta.env.BASE_URL),
|
|
9
9
|
routes: [
|
|
10
|
-
{
|
|
11
|
-
path: '/sso/client/sso-auth/index',
|
|
12
|
-
component: () => import('@/views/sso/client/sso-auth/index.vue'),
|
|
13
|
-
meta: {
|
|
14
|
-
title: '认证',
|
|
15
|
-
isSsoClientExcluded: true
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
10
|
{
|
|
19
11
|
path: '/sso/client/sso-auth/auth-success',
|
|
20
12
|
component: () => import('@/views/sso/client/sso-auth/auth-success.vue'),
|
|
@@ -70,21 +62,15 @@ const router = createRouter({
|
|
|
70
62
|
path: '/example/table/index',
|
|
71
63
|
component: () => import('@/views/example/table/index.vue')
|
|
72
64
|
},
|
|
73
|
-
|
|
74
65
|
...getExceptionRoutes()
|
|
75
66
|
]
|
|
76
67
|
})
|
|
77
68
|
|
|
78
69
|
|
|
79
70
|
/* 路由守卫 */
|
|
80
|
-
router.beforeEach(async (to) => {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
return getSsoAuthRoutePath(to.fullPath);
|
|
84
|
-
}
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
return;
|
|
71
|
+
router.beforeEach(async (to, from) => {
|
|
72
|
+
let ssoAuthResult = await handleSsoAuth(to, from);
|
|
73
|
+
return ssoAuthResult.result;
|
|
88
74
|
});
|
|
89
75
|
|
|
90
76
|
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>认证中...</div>
|
|
3
|
-
</template>
|
|
4
|
-
|
|
5
|
-
<script setup lang="ts">
|
|
6
|
-
import { getCurrentInstance, onMounted } from 'vue';
|
|
7
|
-
import { useRouter } from 'vue-router';
|
|
8
|
-
|
|
9
|
-
import { getSsoAuthUrl, setSsoAccessToken } from '../../../../lib/utils/ssoUtils';
|
|
10
|
-
import { removeParameter } from '../../../../lib/utils/urlUtils';
|
|
11
|
-
import { http } from '../../../../lib/config/httpConfig';
|
|
12
|
-
|
|
13
|
-
const router = useRouter();
|
|
14
|
-
|
|
15
|
-
const { proxy } = getCurrentInstance() as any;
|
|
16
|
-
|
|
17
|
-
onMounted(() => {
|
|
18
|
-
const ssoAuthCode = router.currentRoute.value.query.ssoAuthCode;
|
|
19
|
-
if (!ssoAuthCode) {
|
|
20
|
-
window.location.href = getSsoAuthUrl(window.location.href) || '';
|
|
21
|
-
// 这里一定要return,不return还是会继续执行下面的代码
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
http.get(`/sso-api/client/sso-auth/getSsoAccessToken`, { params: { ssoAuthCode: ssoAuthCode } }).then((res: any) => {
|
|
26
|
-
setSsoAccessToken(res.data.data);
|
|
27
|
-
let ssoRedirectRoutePath = router.currentRoute.value.query.ssoRedirectRoutePath as string;
|
|
28
|
-
ssoRedirectRoutePath = (ssoRedirectRoutePath && decodeURIComponent(ssoRedirectRoutePath)) || ('/sso/client/sso-auth/auth-success' as any);
|
|
29
|
-
ssoRedirectRoutePath = removeParameter('ssoAuthCode', ssoRedirectRoutePath) || '';
|
|
30
|
-
router.push(ssoRedirectRoutePath);
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
</script>
|
|
34
|
-
|
|
35
|
-
<style scoped></style>
|