Web3 与钱包登录
钱包开关、SIWE 签名校验与已停用的连接界面。
概览
Web3Provider 保留 React Query 上下文并立即渲染页面。钱包连接界面已停用,旧 SDK 配置已移除。
登录入口
- 邮箱 / OAuth — NextAuth(
src/auth/*)。 - 钱包 — SIWE 与
siwe/ethers在src/auth/handler.ts等处理;UI 在src/components/sign/modal.tsx(懒加载)、src/components/wallet/*。
运行时配置
GET /api/runtime-config— 下发WEB3_ENABLED、WalletConnect 等公开配置供前端分支。
关键文件
src/lib/web3/dynamic-provider.tsx、provider.tsx、env.tssrc/auth/handler.ts、config.tssrc/app/api/runtime-config/route.ts
说明
线上可能关闭 Web3;文档描述需与 WEB3_ENABLED 实际值一致。
Dependencies
环境变量
NEXT_PUBLIC_WEB3_ENABLED/WEB3_ENABLED—/api/runtime-config与dynamic-provider门闩。NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID、WALLETCONNECT_PROJECT_IDNEXT_PUBLIC_WEB_URL、NEXT_PUBLIC_WEB3_APP_URL— SIWE domain/URI(src/lib/web3/constants.ts)。NEXT_PUBLIC_SUPPORTED_CHAINS— 保留的旧链配置;当前无活动 Wagmi 连接器。AUTH_SECRET— NextAuth 会话。
数据库(src/db/schema.ts)
users—wallet_address、wallet_type、ens_domain、is_wallet_verified、supported_chains、wallet_connected_at
2026-09 登录校验加固
钱包连接界面原本已停用;本次移除了未使用的 Web3Modal/Wagmi 依赖和配置。 邮箱和 Google 登录保留。若启用服务器钱包提供方,必须验证 SIWE 签名、钱包地址、 AUTH_URL(或 NEXT_PUBLIC_WEB_URL)的站点域名和 URI,以及当前 Auth.js 签名 CSRF Cookie 中的随机码。消息签发时间超过五分钟、明显来自未来或来自其他站点时拒绝登录。 不再允许直接提交地址登录,也不允许签名失败后从消息中提取地址作为登录凭据。 此修改不重新启用钱包连接界面。
旧版钱包会话失效后需重新登录;数据库保存失败时不再生成虚假的已登录身份。