Salesforce
获取你的 Salesforce 凭证
- 登录到你的 Salesforce 组织(生产版或开发者版)
- 导航到 设置 > 应用管理器
- 点击 新建已连接应用
- 填写基本信息:
- 已连接应用名称:你的应用名称
- API 名称:从应用名称自动生成
- 联系邮箱:你的电子邮件地址
- 启用 OAuth 设置:
- 勾选 启用 OAuth 设置
- 将 回调 URL 设置为你的重定向 URI(例如,开发环境使用
http://localhost:3000/api/auth/callback/salesforce) - 选择所需的 OAuth 范围:
- 访问你的基本信息 (id)
- 访问你的身份 URL 服务 (openid)
- 访问你的电子邮件地址 (email)
- 随时代表你执行请求 (refresh_token, offline_access)
- 启用 要求使用代码交换密钥 (PKCE)(必填)
- 保存并记录你的 消费者密钥(客户端 ID)和 消费者密钥(客户端密钥)
- 对于开发,你可以使用
http://localhost:3000URL,但生产环境需要 HTTPS - 回调 URL 必须与在 Better Auth 中配置的完全匹配
- Salesforce 要求使用 PKCE(用于代码交换的验证密钥),提供者会自动处理
对于沙箱测试,你可以在沙箱组织中创建连接应用,或者使用相同的连接应用,但在提供者配置中指定 environment: "sandbox"。
配置提供程序
要配置提供程序,你需要导入该提供程序并将其传递给身份验证实例的 socialProviders 选项。
import { betterAuth } from "better-auth"
export const auth = betterAuth({
socialProviders: {
salesforce: {
clientId: process.env.SALESFORCE_CLIENT_ID as string,
clientSecret: process.env.SALESFORCE_CLIENT_SECRET as string,
environment: "production", // or "sandbox"
},
},
})配置选项
clientId:你已连接应用的消费者密钥clientSecret:你已连接应用的消费者密钥environment:"production"(默认)或"sandbox"loginUrl:自定义我的域名 URL(不含https://)- 覆盖环境设置redirectURI:如有需要,可重写自动生成的重定向 URI
高级配置
export const auth = betterAuth({
socialProviders: {
salesforce: {
clientId: process.env.SALESFORCE_CLIENT_ID as string,
clientSecret: process.env.SALESFORCE_CLIENT_SECRET as string,
environment: "sandbox",
loginUrl: "my-company.my.salesforce.com", // Custom My Domain
redirectURI: "http://localhost:3000/api/auth/callback/salesforce", // Override if needed
},
},
})- 在使用 Salesforce 沙箱环境进行测试时,请使用
environment: "sandbox" loginUrl选项对于启用 My Domain 的组织很有用redirectURI选项有助于解决重定向 URI 不匹配错误
环境变量
将以下环境变量添加到你的 .env.local 文件中:
SALESFORCE_CLIENT_ID=your_consumer_key_here
SALESFORCE_CLIENT_SECRET=your_consumer_secret_here
BETTER_AUTH_URL=http://localhost:3000 # Important for redirect URI generation用于生产:
SALESFORCE_CLIENT_ID=your_consumer_key_here
SALESFORCE_CLIENT_SECRET=your_consumer_secret_here
BETTER_AUTH_URL=https://yourdomain.com使用 Salesforce 登录
要使用 Salesforce 登录,你可以使用客户端提供的 signIn.social 函数。signIn 函数接受一个具有以下属性的对象:
provider:要使用的提供程序。它应设置为salesforce。
import { createAuthClient } from "better-auth/client"
const authClient = createAuthClient()
const signIn = async () => {
const data = await authClient.signIn.social({
provider: "salesforce"
})
}Troubleshooting
重定向 URI 不匹配错误
如果你遇到 redirect_uri_mismatch 错误:
- 检查回调 URL:确保你在 Salesforce 已连接的应用中的回调 URL 与你的 Better Auth 回调 URL 完全匹配
- 协议:确保你使用的是相同的协议(
http://与https://) - 端口:验证端口号是否匹配(例如,
:3000) - 如有需要可覆盖:使用
redirectURI选项来明确设置重定向 URI
salesforce: {
clientId: process.env.SALESFORCE_CLIENT_ID as string,
clientSecret: process.env.SALESFORCE_CLIENT_SECRET as string,
redirectURI: "http://localhost:3000/api/auth/callback/salesforce",
}环境问题
- 生产环境:使用
environment: "production"(默认)连接login.salesforce.com - 沙箱环境:使用
environment: "sandbox"连接test.salesforce.com - 我的域:对于自定义域,使用
loginUrl: "yourcompany.my.salesforce.com"
PKCE 要求
Salesforce 要求使用 PKCE(代码交换证明密钥),该提供程序会自动处理。请确保在你的连接应用设置中启用了 PKCE。
默认请求的权限范围是 openid、email 和 profile。提供者将自动包括 id 权限以访问基本用户信息。