Skip to main content
Version: Current

调试指南

登录​

  1. 浏览器开发者工具看 /api/auth/callback/google 是否 302 成功。
  2. 在 Neon 执行:SELECT id, email, role FROM public.users; 确认邮箱大小写无关匹配。
  3. 读终端是否有 [auth] public.users 表不存在。
  4. 改过角色后退出再登,JWT 才会更新。

票数不一致​

SELECT b.id, b.voter, b.weight,
COALESCE(SUM(a.amount), 0) AS allocated
FROM public.ballots b
LEFT JOIN public.ballot_allocations a ON a.ballot_id = b.id
WHERE b.campaign = :id
GROUP BY b.id
HAVING b.weight <> COALESCE(SUM(a.amount), 0);

有结果说明规则同步与已投分票失步。可对未投票用户只刷新 weight;已投票用户缩放逻辑在 syncBallotWeightsForCampaign。

竞选状态​

SELECT id, name, ongoing FROM public.campaigns WHERE id = :id;
SELECT * FROM public.campaign_rule_weights WHERE campaign_id = :id;
SELECT id, display_name FROM public.campaign_candidate_options WHERE campaign_id = :id;

Next 构建​

npm run build

确认输出含 middleware 与各 dashboard 路由。缺 AUTH_SECRET 时生产构建/启动可能在 Auth.js 校验阶段失败。

权限误判​

middleware 不过滤角色。若「侧栏没有入口但 URL 能打开」,对结果页是当前实现;对 admin 页应检查该页是否调用了 requireAdminSession。