OAuth 代理
一个代理插件,允许您代理 OAuth 请求。在开发和预览部署中非常有用,在这些环境中,无法提前知道重定向 URL 以添加到 OAuth 提供商。
安装
将插件添加到您的 auth 配置中
import { betterAuth } from "better-auth"
import { oAuthProxy } from "better-auth/plugins"
export const auth = betterAuth({
plugins: [
oAuthProxy({
productionURL: "https://my-main-app.com", // Optional - if the URL isn't inferred correctly
currentURL: "http://localhost:3000", // Optional - if the URL isn't inferred correctly
}),
]
})将重定向 URL 添加到您的 OAuth 提供商
要使代理服务器正常工作,您需要在社交提供商配置中传递主生产应用在 OAuth 提供商中注册的重定向 URL。这需要为每个您想要代理请求的社交提供商执行此操作。
export const auth = betterAuth({
plugins: [
oAuthProxy(),
],
socialProviders: {
github: {
clientId: "your-client-id",
clientSecret: "your-client-secret",
redirectURI: "https://my-main-app.com/api/auth/callback/github"
}
}
})工作原理
该插件会向您的服务器添加一个端点,用于代理 OAuth 请求。当您启动社交登录时,它会将重定向 URL 设置为该代理端点。在 OAuth 提供商将用户重定向回您的服务器后,插件会将用户转发到原始回调 URL。
await authClient.signIn.social({
provider: "github",
callbackURL: "/dashboard" // the plugin will override this to something like "http://localhost:3000/api/auth/oauth-proxy?callbackURL=/dashboard"
})当 OAuth 提供商将用户返回到您的服务器时,插件会自动将他们重定向到预期的回调 URL。
为了在代理服务器和主服务器之间共享 Cookie,它使用 URL 查询参数在 URL 中传递加密的 Cookie。这是安全的,因为 Cookie 是加密的,并且只能由服务器解密。
选项
currentURL:应用程序的当前 URL 由插件自动确定。它首先检查客户端调用的请求 URL,然后检查流行托管提供商的 base URL,最后回退到您的 auth 配置中的 baseURL。如果 URL 未被正确推断,您可以在这里手动指定它。
productionURL:如果此值与您的 auth 配置中的 baseURL 匹配,则请求不会被代理。默认为 BETTER_AUTH_URL 环境变量。