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", // 可选 - 如果 URL 未能正确推断
            currentURL: "http://localhost:3000", // 可选 - 如果 URL 未能正确推断
        }), 
    ] 
})

将重定向 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" // 插件会将其覆盖为类似 "http://localhost:3000/api/auth/oauth-proxy?callbackURL=/dashboard" 的形式
})

当 OAuth 提供商将用户返回到您的服务器时,插件会自动将他们重定向到预期的回调 URL。

为了在代理服务器和主服务器之间共享 cookies,它使用 URL 查询参数来传递加密在 URL 中的 cookies。这是安全的,因为 cookies 是加密的,并且只能由服务器解密。

选项

currentURL:应用程序的当前 URL 由插件自动确定。它首先检查客户端调用时的请求 URL,然后检查流行托管提供商的基础 URL,最后回退到您 auth 配置中的 baseURL。如果 URL 未能正确推断,您可以在此处手动指定。

productionURL:如果此值与您 auth 配置中的 baseURL 匹配,请求将不会被代理。默认为 BETTER_AUTH_URL 环境变量。

On this page