Skip to content

Commit 8d360b1

Browse files
authored
feat: streamline WeCom QR code login success handling with direct callback integration (#4526)
1 parent 5ddd1db commit 8d360b1

File tree

1 file changed

+17
-20
lines changed

1 file changed

+17
-20
lines changed

ui/src/views/chat/user-login/scanCompinents/wecomQrCode.vue

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
</template>
44

55
<script lang="ts" setup>
6-
import {nextTick, defineProps, onBeforeUnmount} from 'vue'
7-
import {useRoute, useRouter} from 'vue-router'
8-
import {getBrowserLang} from '@/locales'
6+
import { nextTick, defineProps, onBeforeUnmount } from 'vue'
7+
import { useRoute, useRouter } from 'vue-router'
8+
import { getBrowserLang } from '@/locales'
99
import useStore from '@/stores'
1010
1111
const WE_COM_ORIGIN = 'https://login.work.weixin.qq.com'
@@ -22,10 +22,10 @@ const props = defineProps<{
2222
2323
const router = useRouter()
2424
const route = useRoute()
25-
const {chatUser} = useStore()
25+
const { chatUser } = useStore()
2626
2727
const {
28-
params: {accessToken},
28+
params: { accessToken },
2929
} = route as any
3030
3131
let iframe: HTMLIFrameElement | null = null
@@ -43,7 +43,7 @@ function createTransparentIFrame(el: string) {
4343
iframeEl.referrerPolicy = 'origin'
4444
iframeEl.setAttribute('frameborder', '0')
4545
iframeEl.setAttribute('allowtransparency', 'true')
46-
46+
iframeEl.setAttribute('allow', 'local-network-access')
4747
container.appendChild(iframeEl)
4848
return iframeEl
4949
}
@@ -77,21 +77,18 @@ const init = async () => {
7777
`&panel_size=small` +
7878
`&redirect_type=self`
7979
iframe.addEventListener('load', (e) => {
80-
console.log('load', iframe)
8180
if (iframe?.contentWindow) {
82-
iframe.contentWindow.stop()
83-
const searchParams = new URLSearchParams(iframe.contentWindow.location.search)
84-
const code = searchParams.get('code')
85-
if (code) {
86-
chatUser.wecomCallback(code, accessToken).then((ok) => {
87-
router.push({
88-
name: 'chat',
89-
params: {accessToken},
90-
query: route.query,
91-
})
92-
cleanup()
93-
})
94-
}
81+
iframe.contentWindow.postMessage('getToken', '*')
82+
}
83+
})
84+
window.addEventListener('message', (event) => {
85+
if (event.data.type === 'token') {
86+
chatUser.setToken(event.data.value)
87+
router.push({
88+
name: 'chat',
89+
params: { accessToken },
90+
query: route.query,
91+
})
9592
}
9693
})
9794
}

0 commit comments

Comments
 (0)