You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NextAuth的AUTH_REDIRECT_PROXY_URL是否支持GitHub以外的服务商?

NextAuth在Vercel预览部署中实现OAuth代理的解决方案

关于AUTH_REDIRECT_PROXY_URL的局限

AUTH_REDIRECT_PROXY_URL目前仅在GitHub Provider的代码逻辑中实现,并非全局支持所有OAuth Provider,这也是你使用Cognito时无法生效的核心原因。

可行替代方案

1. 动态生成Provider的回调URL

针对Cognito Provider手动配置redirectUri,利用Vercel自动注入的VERCEL_URL环境变量动态适配预览域名:

import NextAuth from "next-auth"
import Cognito from "next-auth/providers/cognito"

export default NextAuth({
  providers: [
    Cognito({
      clientId: process.env.COGNITO_CLIENT_ID,
      clientSecret: process.env.COGNITO_CLIENT_SECRET,
      issuer: process.env.COGNITO_ISSUER,
      redirectUri: `${process.env.NEXTAUTH_URL}/api/auth/callback/cognito`
    })
  ],
  // 可在Vercel项目环境变量中设置 NEXTAUTH_URL=https://${VERCEL_URL}
})

Vercel预览部署会自动为每个分支生成唯一的VERCEL_URL,通过这个配置可以让回调URL自动适配不同的预览实例。

2. 使用Edge Function做统一跳转代理

编写一个Edge Function转发OAuth回调请求,解决Cognito回调URL无法动态变更的问题:

// app/api/auth/cognito-proxy/route.js
export async function GET(request) {
  const { searchParams } = new URL(request.url)
  const targetCallbackUrl = new URL(`${process.env.NEXTAUTH_URL}/api/auth/callback/cognito`)
  
  // 复制所有OAuth回调参数到目标URL
  searchParams.forEach((val, key) => targetCallbackUrl.searchParams.append(key, val))
  
  return Response.redirect(targetCallbackUrl)
}

然后在Cognito的OAuth配置中,将回调URL设置为这个Edge Function的地址,这样所有预览实例都可以共用这个回调地址,再由Edge Function转发到对应的预览实例。

3. 配置反向代理固定回调地址

如果你的团队有统一的预览代理域名,可以通过NextAuth的basePath配合Vercel重写规则实现:

// next-auth.config.ts
export default NextAuth({
  basePath: "/auth-proxy",
  providers: [
    Cognito({
      // ...其他配置
      redirectUri: "https://your-fixed-proxy-domain.com/auth-proxy/api/auth/callback/cognito"
    })
  ]
})

在Vercel项目的next.config.js中添加重写规则:

/** @type {import('next').NextConfig} */
const nextConfig = {
  async rewrites() {
    return [
      {
        source: "/auth-proxy/:path*",
        destination: `${process.env.PREVIEW_INSTANCE_URL}/api/auth/:path*`
      }
    ]
  }
}

module.exports = nextConfig

通过这种方式,固定的回调地址会被转发到当前预览实例的Auth接口。

内容的提问来源于stack exchange,提问作者lightcap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 22:13:34