Vercel预览环境下适配动态子域名的OAuth重定向URI配置问题
问题解答
关于Google OAuth通配符配置的可行性
首先明确:Google OAuth默认不支持给Vercel默认的vercel.app后缀域名配置通配符,因为vercel.app属于公共后缀域名,Google出于安全考虑禁止给公共后缀域配置通配符规则。
如果你要让所有预览环境都支持OAuth登录,有可行的替代方案:
- 给Vercel项目配置自定义预览域名,比如指定所有预览部署都使用
*.preview.yourdomain.com格式的域名(需要你自己持有yourdomain.com域名并完成解析配置),此时可以在Google Cloud后台的OAuth配置中,添加https://*.preview.yourdomain.com/api/auth/callback/google作为重定向URI,同时将https://*.preview.yourdomain.com加入允许来源列表,即可覆盖所有预览环境的域名需求。配置完成后,你可以在next-auth配置中直接读取Vercel自带的VERCEL_URL环境变量动态设置NEXTAUTH_URL,不需要手动维护不同预览环境的域名配置。 - 如果你不想配置自定义域名,也可以每次生成预览环境后,临时将当前预览部署的域名加到Google OAuth的允许列表中,不过这种方式只适合单次测试,效率很低。
预览环境是否需要关闭身份验证
两种方案各有适用场景,可以根据你的需求选择:
选择保留身份验证的场景
如果你的预览环境需要测试和身份权限相关的业务逻辑,或是需要对外分享给测试人员、客户查看有权限限制的内容,推荐用上述自定义域名+通配符的方案保留验证功能,不用改动业务代码逻辑。
注意:通配符规则仅限预览环境使用,生产环境必须写死固定域名,避免安全风险
选择关闭身份验证的场景
如果你的预览环境仅测试前端无权限逻辑,不需要用到身份相关功能,直接关闭验证是成本更低的选择。
操作方式很简单:
- 在Vercel后台给预览环境单独配置环境变量
NEXT_PUBLIC_DISABLE_AUTH=true - 在next-auth的权限拦截逻辑(比如middleware、getServerSideProps、客户端权限校验)中,增加判断:如果检测到该环境变量为true,直接跳过所有身份校验,给请求放行即可。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

