+
@@ -22,7 +22,17 @@ import { useSettingStore } from "/@/store/settings";
import { useRoute } from "vue-router";
import PasskeyLogin from "../login/passkey-login.vue";
-const oauthProviderList = ref([]);
+type OauthProviderItem = {
+ name: string;
+ type?: string;
+ subtype?: string;
+ title: string;
+ addonTitle?: string;
+ icon: string;
+ addonId?: number;
+};
+
+const oauthProviderList = ref([]);
const props = defineProps<{
oauthOnly?: boolean;
}>();
@@ -42,15 +52,19 @@ onMounted(async () => {
if (settingStore.sysPublic.oauthAutoRedirect && queryOauthOnly !== "false") {
const firstOauth = oauthProviderList.value.find(item => item.addonId > 0);
if (firstOauth) {
- goOauthLogin(firstOauth.name);
+ goOauthLogin(firstOauth);
}
}
});
-async function goOauthLogin(type: string) {
+function buildProviderKey(item: OauthProviderItem) {
+ return `${item.name}:${item.subtype || ""}`;
+}
+
+async function goOauthLogin(item: OauthProviderItem) {
//获取第三方登录URL
const from = "web";
- const res = await api.OauthLogin(type, from);
+ const res = await api.OauthLogin(item.name, "login", from, item.subtype);
const loginUrl = res.loginUrl;
window.location.href = loginUrl;
}
diff --git a/packages/ui/certd-client/src/views/sys/settings/api.ts b/packages/ui/certd-client/src/views/sys/settings/api.ts
index c758e4e04..a252ad3a4 100644
--- a/packages/ui/certd-client/src/views/sys/settings/api.ts
+++ b/packages/ui/certd-client/src/views/sys/settings/api.ts
@@ -114,7 +114,7 @@ export async function GetSmsTypeDefine(type: string) {
export async function GetOauthProviders() {
return await request({
- url: "/oauth/providers",
+ url: apiPrefix + "/oauth/providers",
method: "post",
});
}
diff --git a/packages/ui/certd-client/src/views/sys/settings/tabs/oauth.vue b/packages/ui/certd-client/src/views/sys/settings/tabs/oauth.vue
index 0c9a56bfe..c0bc80d11 100644
--- a/packages/ui/certd-client/src/views/sys/settings/tabs/oauth.vue
+++ b/packages/ui/certd-client/src/views/sys/settings/tabs/oauth.vue
@@ -109,6 +109,7 @@ const formState = reactive>({
const oauthProviders = ref([]);
async function loadOauthProviders() {
oauthProviders.value = await api.GetOauthProviders();
+ mergeOauthProviderSettings();
}
const bindDomain = computed(() => {
@@ -164,6 +165,16 @@ const onFinish = async (form: any) => {
function buildCallbackUrl(type: string) {
return `${window.location.origin}/api/oauth/callback/${type}`;
}
+
+function mergeOauthProviderSettings() {
+ const savedProviders = formState.public?.oauthProviders || {};
+ for (const item of oauthProviders.value) {
+ const saved = savedProviders[item.name];
+ if (saved) {
+ item.addonId = saved.addonId;
+ }
+ }
+}