Files
Yi.Framework/Yi.Bbs.Vue3/src/views/Auth/index.vue
2024-01-10 23:24:12 +08:00

73 lines
1.7 KiB
Vue

<template>
<div class="message">{{ message }}</div>
</template>
<script setup>
import { ref, watch } from "vue";
import { useRoute } from "vue-router";
import { authOtherLogin, authOtherBind } from "@/apis/auth.js";
const route = useRoute();
const code = ref(route.query.code);
const type = ref(route.query.state);
const message = ref("");
const scheme = ref("");
const authData = ref("");
const closeWindow = () => {
setTimeout(() => {
window.close();
}, 2000);
};
watch(
() => code.value,
async (val) => {
if (val) {
// 使用正则表达式提取路由参数
const regex = /\/auth\/([\w-]+)[?]?/;
const result = regex.exec(route.fullPath);
const authParam = result != null ? result[1] : null;
switch (authParam) {
case "gitee":
scheme.value = "Gitee";
break;
case "qq":
scheme.value = "QQ";
break;
}
try {
if (type.value === "0") {
const { data } = await authOtherLogin({ code: val }, scheme.value);
authData.value = data;
} else if (type.value === "1") {
const { data } = await authOtherBind({ code: val }, scheme.value);
authData.value = data;
}
} catch (error) {
if (error.status === 403) {
closeWindow();
}
}
window.opener.postMessage({
authData: JSON.stringify(authData.value),
type: scheme.value,
});
message.value = "授权成功";
closeWindow();
}
},
{ immediate: true }
);
</script>
<style lang="scss">
.message {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
font-size: 20px;
}
</style>