OAuth 代理

一个代理插件,允许您代理 OAuth 请求。在开发和预览部署中非常有用,在这些环境中,无法提前知道重定向 URL 以添加到 OAuth 提供商。

安装

将插件添加到您的 auth 配置中

auth.ts
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 环境变量。

On this page