OAuth代理

代理插件,允许您代理OAuth请求。对于开发和预览部署很有用,因为这些环境中的重定向URL无法提前知道以添加到OAuth提供商中。

安装

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

auth.ts
import { betterAuth } from "better-auth"
import { oAuthProxy } from "better-auth/plugins"
 
export const auth = betterAuth({
    plugins: [ 
        oAuthProxy(), 
    ] 
})

将重定向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。

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

选项

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

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

On this page