You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TanStack Router useSearch获取Passport.js谷歌认证Google ID异常求助

解决TanStack Router获取Google ID时的精度丢失问题

你的判断完全正确:Google ID的数值超过了JavaScript Number 类型的安全整数范围(2^53 - 1),TanStack Router默认会将数字型的搜索参数自动转换为Number,导致精度丢失。以下是几种可靠的解决方法:

方法一:通过路由搜索参数Schema指定类型(推荐)

如果使用TanStack Router v10及以上版本,可以在路由定义时配置searchSchema,明确将googleId指定为字符串类型,避免自动转换。

使用Zod Schema(官方推荐方式)

import { z } from 'zod';
import { createFileRoute } from '@tanstack/react-router';

export const Route = createFileRoute('/signup/addOtherInfo')({
  searchSchema: z.object({
    email: z.string(),
    googleId: z.string(), // 强制解析为字符串
  }),
});

之后在组件中正常使用useSearch()即可,此时googleId会保持原始字符串值:

const { email, googleId } = Route.useSearch();

自定义解析函数

如果不使用Zod,也可以通过searchParser手动解析搜索参数:

import { createFileRoute } from '@tanstack/react-router';

export const Route = createFileRoute('/signup/addOtherInfo')({
  searchParser: (searchParams) => ({
    email: searchParams.get('email') || '',
    googleId: searchParams.get('googleId') || '', // 直接获取原始字符串
  }),
});

方法二:手动使用URLSearchParams获取

绕过TanStack Router的自动解析逻辑,直接从浏览器URL中提取原始字符串参数:

const searchParams = new URLSearchParams(window.location.search);
const email = searchParams.get('email');
const googleId = searchParams.get('googleId'); // 得到完整的原始Google ID字符串

方法三:后端传递时优化(辅助措施)

虽然前端处理是核心,但后端重定向时可以确保googleId以字符串形式传递(URL参数本身就是字符串,此步骤主要是避免后端输出时的隐式转换):

return res.redirect(`${process.env.FRONTEND_URL}/signup/addOtherInfo?email=${encodeURIComponent(user.email)}&googleId=${String(user.googleId)}`);

注意使用encodeURIComponent处理特殊字符(比如邮箱中的@),避免URL解析错误。

内容的提问来源于stack exchange,提问作者Samiul Karim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 21:53:26