From 39732ad3b20f3088491888d621c23b587a2c8afb Mon Sep 17 00:00:00 2001 From: xingyu Date: Thu, 8 Jun 2023 14:45:25 +0800 Subject: [PATCH] feat: sso init --- src/api/base/login.ts | 32 ++++ src/locales/lang/en/routes/basic.ts | 1 + src/locales/lang/en/sys.ts | 4 + src/locales/lang/zh-CN/routes/basic.ts | 1 + src/locales/lang/zh-CN/sys.ts | 4 + src/router/routes/index.ts | 10 ++ src/views/base/login/SSOForm.vue | 196 ++++++++++++++++++++++++ src/views/base/login/sso.vue | 204 +++++++++++++++++++++++++ 8 files changed, 452 insertions(+) create mode 100644 src/views/base/login/SSOForm.vue create mode 100644 src/views/base/login/sso.vue diff --git a/src/api/base/login.ts b/src/api/base/login.ts index d93342a..a1bf854 100644 --- a/src/api/base/login.ts +++ b/src/api/base/login.ts @@ -47,3 +47,35 @@ export function getCaptcha(data) { export function checkCaptcha(data) { return defHttp.post({ url: Api.CheckCaptcha, data }, { isReturnNativeResponse: true }) } + +// ========== OAUTH 2.0 相关 ========== + +export function getAuthorize(clientId) { + return defHttp.get({ url: '/system/oauth2/authorize?clientId=' + clientId }) +} + +export function authorize(responseType, clientId, redirectUri, state, autoApprove, checkedScopes, uncheckedScopes) { + // 构建 scopes + const scopes = {} + for (const scope of checkedScopes) { + scopes[scope] = true + } + for (const scope of uncheckedScopes) { + scopes[scope] = false + } + // 发起请求 + return defHttp.post({ + url: '/system/oauth2/authorize', + headers: { + 'Content-type': 'application/x-www-form-urlencoded' + }, + params: { + response_type: responseType, + client_id: clientId, + redirect_uri: redirectUri, + state: state, + auto_approve: autoApprove, + scope: JSON.stringify(scopes) + } + }) +} diff --git a/src/locales/lang/en/routes/basic.ts b/src/locales/lang/en/routes/basic.ts index d179c30..2963cbe 100644 --- a/src/locales/lang/en/routes/basic.ts +++ b/src/locales/lang/en/routes/basic.ts @@ -1,5 +1,6 @@ export default { login: 'Login', + sso: 'SSO Login', errorLogList: 'Error Log', profile: 'User Center', notifyMessage: 'Notify Message' diff --git a/src/locales/lang/en/sys.ts b/src/locales/lang/en/sys.ts index d3739c7..4a96f69 100644 --- a/src/locales/lang/en/sys.ts +++ b/src/locales/lang/en/sys.ts @@ -65,6 +65,7 @@ export default { }, login: { backSignIn: 'Back sign in', + ssoSignInFormTitle: 'sso login', mobileSignInFormTitle: 'Mobile sign in', qrSignInFormTitle: 'Qr code sign in', signInFormTitle: 'Sign in', @@ -82,6 +83,9 @@ export default { forgetPassword: 'Forget Password?', otherSignIn: 'Sign in with', + ssoInfoDesc: 'get your personal details and get started!', + ssoEditDesc: 'edit your personal details and get started!', + // notify loginSuccessTitle: 'Login successful', loginSuccessDesc: 'Welcome back', diff --git a/src/locales/lang/zh-CN/routes/basic.ts b/src/locales/lang/zh-CN/routes/basic.ts index 1f14775..585aa49 100644 --- a/src/locales/lang/zh-CN/routes/basic.ts +++ b/src/locales/lang/zh-CN/routes/basic.ts @@ -1,5 +1,6 @@ export default { login: '登录', + sso: '第三方授权登录', errorLogList: '错误日志列表', profile: '个人中心', notifyMessage: '站内信' diff --git a/src/locales/lang/zh-CN/sys.ts b/src/locales/lang/zh-CN/sys.ts index 111a321..cfeeb58 100644 --- a/src/locales/lang/zh-CN/sys.ts +++ b/src/locales/lang/zh-CN/sys.ts @@ -62,6 +62,7 @@ export default { login: { backSignIn: '返回', signInFormTitle: '登录', + ssoSignInFormTitle: '三方授权登录', mobileSignInFormTitle: '手机登录', qrSignInFormTitle: '二维码登录', signUpFormTitle: '注册', @@ -78,6 +79,9 @@ export default { forgetPassword: '忘记密码?', otherSignIn: '其他登录方式', + ssoInfoDesc: '访问您的个人详细信息开始使用!', + ssoEditDesc: '修改您的个人详细信息开始使用!', + // notify loginSuccessTitle: '登录成功', loginSuccessDesc: '欢迎回来', diff --git a/src/router/routes/index.ts b/src/router/routes/index.ts index 167c472..3224fe5 100644 --- a/src/router/routes/index.ts +++ b/src/router/routes/index.ts @@ -38,6 +38,15 @@ export const LoginRoute: AppRouteRecordRaw = { } } +export const SSORoute: AppRouteRecordRaw = { + path: '/sso', + name: 'SSO', + component: () => import('@/views/base/login/sso.vue'), + meta: { + title: t('routes.basic.sso') + } +} + export const ProfileRoute: AppRouteRecordRaw = { path: '/profile', component: LAYOUT, @@ -268,6 +277,7 @@ export const BpmRoute: AppRouteRecordRaw = { // 未经许可的基本路由 export const basicRoutes = [ LoginRoute, + SSORoute, RootRoute, ProfileRoute, CodegenRoute, diff --git a/src/views/base/login/SSOForm.vue b/src/views/base/login/SSOForm.vue new file mode 100644 index 0000000..864e4bb --- /dev/null +++ b/src/views/base/login/SSOForm.vue @@ -0,0 +1,196 @@ + + diff --git a/src/views/base/login/sso.vue b/src/views/base/login/sso.vue new file mode 100644 index 0000000..317e9d4 --- /dev/null +++ b/src/views/base/login/sso.vue @@ -0,0 +1,204 @@ + + +