大多数 AI 构建的应用用 Supabase(Lovable、Bolt、v0 以及许多来自 Cursor 或 Claude Code 的应用)、Firebase(Antigravity)、Clerk 或构建工具自带的登录(Replit、Base44)让用户登录。各提供商页面有深入介绍:Supabase 问题、Firebase 问题。本页介绍生成的应用额外带来的问题。
对你有效,对别人无效
应用是你建的,所以你在 Supabase 项目的团队里,很可能还处于登录状态,并且在构建工具给你的域名上测试。测试者这些都没有:
- 邮件服务只给你发邮件。 Supabase 的内置发送服务只发给项目团队成员,每小时最多 2 封。请设置自定义 SMTP。在 Lovable Cloud 上,请在 Auth 设置中检查发送限制。
- 你已经登录了。 对有会话的人来说,坏掉的注册看起来也正常。请在无痕窗口中,用从未用过的地址测试。
链接打开的是预览或 localhost
邮件中的链接是根据应用的公开地址设置生成的。如果它还停留在 http://localhost:3000,或被设为下次部署就会变的预览链接,用户就会到达打不开的页面。在 Lovable Cloud 上,除非你自己设置过,Lovable 会在发布时设置它;在你自己的 Supabase 项目中,它是 Site URL。把它设为已发布的域名,并在 Redirect URLs 中列出预览地址。更多内容见 为什么邮件链接指向 localhost。Proxy Mail QA 会在该地址的行上标记这些链接。
点击链接后没有登录
链接会把一个代码带回你的应用,需要有页面把它换成会话。生成的应用常把链接指向首页,而首页会忽略这个代码,所以用户到达时仍未登录,以为失败了。请让构建工具做一个完成登录的页面(通常是 /auth/callback),并让邮件链接指向它。使用 Supabase 时,测试者应在注册时用的浏览器中打开链接:原因。
无论发生什么都显示“请查收邮件”
生成的注册表单常常无论提供商返回什么都显示同样的成功消息。背后的情况:
- 该地址已有账号。 Supabase 的回应就像注册成功一样,但什么都不发,以免泄露谁有账号。应用应显示:“如果该地址是新的,我们已发送链接。已经注册过?请登录或重置密码。”
- 操作太快。 60 秒内的第二次请求会被拒绝,而应用隐藏了这个错误。
- 邮件确认已关闭。 账号已创建并登录,完全没有邮件。
请让构建工具在有错误时显示提供商的错误,并把成功消息写得在两种情况下都属实。
重置邮件无处可去
密码重置链接会让用户登录,然后应用需要显示“设置新密码”表单。生成的应用常常跳过这个页面,于是用户以旧密码登录,却无法修改。请让构建工具做一个由链接打开的重置页面,并做端到端测试:测试密码重置邮件。
拒绝真实用户或放过错误数据的表单
- 过严: 一些生成的表单会拒绝含
+、大写字母或较新域名后缀(如.dev)的地址,或含撇号的名字。特殊地址 和 特殊名字和密码 列出了可以尝试的内容。 - 过松: 表单接受了数据库不接受的值,当应用的
profiles表拒绝它时,注册失败并显示 “Database error saving new user”。255 个字符的名字或空用户名可以发现这类问题。
构建时关闭了邮件确认
构建工具有时会关闭邮件确认,让注册更容易试,上线时它仍处于关闭状态。这样任何人都能用不属于自己的地址注册,你也永远不知道确认邮件是否有效。分享应用前请重新开启,并用能收邮件的地址测试。
智能体说已经完成
编程智能体只检查表单能否提交,不检查邮件是否到达或链接是否有效。连接 Proxy Mail QA MCP server,让它用新地址注册,等待验证码或链接并完成注册。它只读取验证码或链接,从不读取邮件正文。
可直接复制给构建工具的提示词
Check our login setup: list every email the app sends (sign-up confirmation, magic link, password reset, email change), which service sends it, and the page each link opens. Flag any link built from localhost or a preview address, and any link that opens a page that doesn't finish signing in.Add a page that finishes sign-in when someone opens the link in a confirmation or magic-link email, and a page to choose a new password after a reset link. Point the email links at them.On sign-up, show the error the login service returns, if any. When it succeeds, say: "If that address is new, we've sent a link. Already signed up? Sign in or reset your password." Never say an email was sent when it wasn't.你的构建工具指南
每篇都介绍各自的登录选项和设置:Lovable、Bolt、v0、Replit、Base44、Antigravity、Cursor 和 Claude Code。不确定你的应用用哪种登录?登录方式对比。