症状
最近我们调整了 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 功能
}),
// ...
};