<template>
|
<div v-loading="loading" class="social-callback"></div>
|
</template>
|
|
<script setup lang="ts">
|
import { login,loginBySocial } from '@/api/login';
|
import { setToken, getToken } from '@/utils/auth';
|
|
import { LoginData } from '@/api/types';
|
import {ElMessage} from "element-plus";
|
import {useRoute} from "vue-router";
|
import useUserStore from '@/store/modules/user'
|
|
const route = useRoute();
|
const loading = ref(true);
|
|
|
/**
|
* 接收Route传递的参数
|
* @param {Object} route.query.
|
*/
|
const code = route.query.code as string;
|
const state = route.query.state as string;
|
console.log("state", atob(state))
|
const source = route.query.source as string;
|
// const stateJson = JSON.parse(atob(state));
|
// const domain = stateJson.domain as string;
|
console.log("code", code)
|
const processResponse = async (res: any) => {
|
if (res.code !== 200) {
|
throw new Error(res.msg);
|
}
|
if (res.data !== null) {
|
setToken(res.token);
|
useUserStore().token = res.token;
|
}
|
ElMessage.success(res.msg);
|
setTimeout(() => {
|
location.href = '/index';
|
}, 2000);
|
};
|
|
const handleError = (error: any) => {
|
ElMessage.error(error.message);
|
setTimeout(() => {
|
location.href = '/index';
|
}, 2000);
|
};
|
//
|
// const callbackByCode = async (data: LoginData) => {
|
// try {
|
// const res = await callback(data);
|
// await processResponse(res);
|
// loading.value = false;
|
// } catch (error) {
|
// handleError(error);
|
// }
|
// };
|
|
const loginByCode = async (data: LoginData) => {
|
try {
|
const res = await loginBySocial(data);
|
await processResponse(res);
|
loading.value = false;
|
} catch (error) {
|
handleError(error);
|
}
|
};
|
|
const init = async () => {
|
// // 如果域名不相等 则重定向处理
|
// let host = window.location.host;
|
// if (domain !== host) {
|
// let urlFull = new URL(window.location.href);
|
// urlFull.host = domain;
|
// window.location.href = urlFull.toString();
|
// return;
|
// }
|
|
const data: LoginData = {
|
socialCode: code,
|
socialState: state,
|
source: 'keycloak',
|
grantType: 'social'
|
};
|
|
|
await loginByCode(data);
|
|
};
|
|
onMounted(() => {
|
nextTick(() => {
|
init();
|
});
|
});
|
</script>
|