fix(passport): 兼容小程序码参数并优化扫码登录逻辑
- 新增对小程序码参数 scene 的支持,用于微信透传 - 优先使用 scene 参数作为登录 token 来源 - 仅当未获取 loginToken 时,才解析 q 参数的 URL 编码 - 扩展扫码自动登录判定条件,包含 scene 参数 - 调整注释内容,提升代码可读性和说明准确性
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user