优化微信扫码登录功能及token获取逻辑

This commit is contained in:
wangqiao
2025-10-15 22:40:23 +08:00
parent 9e225417a6
commit 3c6ed5a72c
3 changed files with 42 additions and 6 deletions

View File

@ -55,7 +55,7 @@ export const getTokenByCode = (params: { type: number; code: string; state: stri
/**
* 社交快捷登录,使用 code 授权码
*/
export const socialLoginByCode = (params: { type: number; code: string; state: string }) => {
export const socialLoginByCode = (params: { type?: number; code?: string; state?: string; openId?: string; sceneStr?: string }) => {
return useDollarFetchRequest.post<
IResponse<{
accessToken: string

View File

@ -11,8 +11,10 @@
</div>
</template>
<script setup lang="ts">
import useUserStore from '~/stores/user'
import { getLoginQrcode, checkScanStatus } from '~/api/personal-center/index'
import QrcodeVue from 'qrcode.vue'
const store = useUserStore()
const visible = defineModel('visible', {
default: false,
@ -60,8 +62,10 @@
if (response.code === 0) {
checkLoginInfo.value = response.data
if (checkLoginInfo.value.status === 'SCANNED') {
// 登录
await store.getTokenV2({ openId: checkLoginInfo.value.openId as string, sceneStr: sceneStr.value })
// 扫码成功
// visible.value = false
visible.value = false
clearInterval(timer.value)
} else if (checkLoginInfo.value.status === 'EXPIRED') {
// 二维码过期

View File

@ -99,6 +99,38 @@ export default defineStore('useUserStore', {
console.error('getToken error:', error)
}
},
async getTokenV2(row: any) {
const app = useNuxtApp()
try {
const res = await socialLoginByCode({
openId: row.openid,
sceneStr: row.sceneStr,
})
const { code, data } = res
if (code === 0) {
// 打开登录界面
if (!data.accessToken) {
ElMessage.error('因你未绑定手机号,请先绑定手机号')
app.$openLogin('verify', row.code, row.type, row.state)
} else {
refreshToken.setToken(data.accessToken, data.refreshToken)
refreshToken.setUserId(data.userId.toString())
// refreshToken.setUserName(loginForm.mobile)
this.setToken(data.accessToken)
this.setUserId(data.userId.toString())
// userStore.setUserName(loginForm.mobile)
this.setRefreshToken(data.refreshToken)
// 获取信息
await this.getUserInfo()
}
} else {
console.error('获取token失败:', res.msg)
}
} catch (error) {
console.error('getToken error:', error)
}
},
},
persist: import.meta.client && {
key: 'tuxixi-store',