46 lines
1.3 KiB
Vue
46 lines
1.3 KiB
Vue
<script setup lang="ts">
|
|
import { onMounted } from 'vue'
|
|
import { useRouter } from 'vue-router'
|
|
import { api } from '../../api/client'
|
|
import { useSessionStore } from '../../stores/session'
|
|
|
|
const router = useRouter()
|
|
const session = useSessionStore()
|
|
|
|
function backToCaller() {
|
|
sessionStorage.setItem('gb_iam_sso_skip', '1')
|
|
const saved = sessionStorage.getItem('gb_iam_return')
|
|
sessionStorage.removeItem('gb_iam_return')
|
|
const path = saved && saved.startsWith('/') && !saved.startsWith('//') ? saved : '/'
|
|
return router.replace(path)
|
|
}
|
|
|
|
onMounted(async () => {
|
|
const params = new URLSearchParams(window.location.search)
|
|
sessionStorage.removeItem('gb_iam_sso_checked')
|
|
|
|
if (params.get('error') || !params.get('code') || !params.get('state')) {
|
|
await backToCaller()
|
|
return
|
|
}
|
|
|
|
try {
|
|
const result = await api.ssoCallback(params.get('code') as string, params.get('state') as string)
|
|
session.login(result.token, result.customer.id, result.customer.mobile)
|
|
try {
|
|
const who = await api.getExpertIdentity()
|
|
session.setSalesExpert(who.isSalesExpert)
|
|
} catch {
|
|
session.setSalesExpert(false)
|
|
}
|
|
await router.replace({ name: 'home' })
|
|
} catch {
|
|
await backToCaller()
|
|
}
|
|
})
|
|
</script>
|
|
|
|
<template>
|
|
<div style="min-height: 100vh; display: grid; place-items: center">در حال ورود...</div>
|
|
</template>
|