老胡茶室
老胡茶室

排错:Astro 部署 Vercel 环境 Better Auth 登录失败问题


症状

最近我们调整了 Astro 的配置,调整了一下针对 Vercel adapter 的优化部分,结果发现 登录功能失效了,并且会显示 Better Auth 的错误页面:

Better Auth Error

We encountered an issue while processing your request. Please try again or contact the application owner if the problem persists.

Error Code: Unknown

有时在刷新页面之后,我们甚至能在页面上看到别人的登录用户名。

分析

由于是修改了 astro.config.mjs 的配置之后导致这个问题的,所以我们检查了下提交记录,发现是启用了 Vercel 的 ISR(增量静态生成)功能:

// ...
  adapter: vercel({
    imageService: true,
    isr: true,
  }),
// ...

ISR 功能会在 Vercel 上启用增量静态生成,这样可以提高页面的加载速度和性能。简单来说就是它可以利用 CDN 缓存来加速页面的加载。

所以很显然,对于 CDN 不能缓存的资源来说,这个功能就会有问题。

对于动态内容(比如登录、注册等功能),Vercel 的 ISR 会将这些请求视为静态资源进行处理,导致无法正确处理动态请求。

解决方案

了解 ISR 的工作原理后,解决方案就很简单了,只需要在 astro.config.mjs 中禁用 ISR 功能即可。去掉 isr: true 的配置:

export default {
  // ...
  adapter: vercel({
    imageService: true,
    // isr: true, // 禁用 ISR 功能
  }),
  // ...
};