导航
邮箱是联系方式,不是稳定身份。Google 和 GitHub 的 provider subject 才是绑定 OAuth 账号的主键。
同一个邮箱可能先被本地账号注册,也可能来自未验证的 OAuth 返回值。直接按邮箱合并会产生账号接管风险。
正确模型是存储 auth_provider 和 oauth_provider_id,并为二者建立唯一索引。邮箱只参与展示和冲突提示。
code、state、错误参数和 PKCE verifier 的解析应该在一个 helper 中完成。每个 provider 只传入 cookie 名称和文案,避免回调路由出现细微差异。