diff --git a/src/passport/qr-confirm/index.tsx b/src/passport/qr-confirm/index.tsx index d05eb7f..ec58658 100644 --- a/src/passport/qr-confirm/index.tsx +++ b/src/passport/qr-confirm/index.tsx @@ -32,13 +32,14 @@ const QRConfirmPage: React.FC = () => { const params = router.params; // 兼容多种参数名 - // 1. 直接参数:?token=xxx - // 2. URL 编码参数:?q=xxx(扫普通链接二维码场景) - // 3. 旧版参数:?qrCodeKey=xxx - let loginToken = params.token || params.qrCodeKey || ''; + // 1. 小程序码场景:?scene=xxx(微信会将 scene 参数透传到小程序) + // 2. 直接参数:?token=xxx + // 3. URL 编码参数:?q=xxx(扫普通链接二维码场景) + // 4. 旧版参数:?qrCodeKey=xxx + let loginToken = params.scene || params.token || params.qrCodeKey || ''; // 如果是 q 参数(URL 编码的完整 URL),需要解析 - if (params.q) { + if (params.q && !loginToken) { try { const decodedUrl = decodeURIComponent(params.q); console.log('[QRConfirm] 解码后的 URL:', decodedUrl); @@ -64,9 +65,9 @@ const QRConfirmPage: React.FC = () => { setToken(loginToken); console.log('[QRConfirm] 获取到 token:', loginToken); - // URL 扫码场景:自动确认登录 - // 如果 URL 参数中有 token/qrCodeKey/q,说明是扫码跳转过来的,自动确认 - if (params.token || params.qrCodeKey || params.q) { + // 扫码场景:自动确认登录 + // scene 参数说明是扫描小程序码进来的,token 参数说明是扫码跳转过来的 + if (params.scene || params.token || params.qrCodeKey || params.q) { console.log('[QRConfirm] 检测到扫码参数,自动确认登录'); setTimeout(() => { handleAutoConfirm(loginToken);