fix(passport): 兼容小程序码参数并优化扫码登录逻辑

- 新增对小程序码参数 scene 的支持,用于微信透传
- 优先使用 scene 参数作为登录 token 来源
- 仅当未获取 loginToken 时,才解析 q 参数的 URL 编码
- 扩展扫码自动登录判定条件,包含 scene 参数
- 调整注释内容,提升代码可读性和说明准确性
This commit is contained in:
2026-04-07 21:14:18 +08:00
parent 9f4af005d5
commit dd4d5576b0

View File

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