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.ts
  • src/auth/handler.ts、config.ts
  • src/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_ID
  • NEXT_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 中的随机码。消息签发时间超过五分钟、明显来自未来或来自其他站点时拒绝登录。 不再允许直接提交地址登录,也不允许签名失败后从消息中提取地址作为登录凭据。 此修改不重新启用钱包连接界面。

旧版钱包会话失效后需重新登录;数据库保存失败时不再生成虚假的已登录身份。

Web3 与钱包登录 | 追踪狗文档