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", // 可选 - 如果 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
环境变量。