Salesforce

获取你的 Salesforce 凭证

  1. 登录到你的 Salesforce 组织(生产版或开发者版)
  2. 导航至 设置 > 应用管理器
  3. 点击 新建已连接的应用
  4. 填写基本信息:
    • 已连接应用名称:你的应用名称
    • API 名称:从应用名称自动生成
    • 联系邮箱:你的电子邮件地址
  5. 启用 OAuth 设置:
    • 勾选 启用 OAuth 设置
    • 回调 URL 设置为你的重定向 URI(例如,开发环境使用 http://localhost:3000/api/auth/callback/salesforce
    • 选择所需的 OAuth 范围:
      • 访问你的基本信息(ID)
      • 访问你的身份 URL 服务(openid)
      • 访问你的电子邮件地址(邮箱)
      • 随时代表你执行请求(刷新令牌,离线访问)
  6. 启用 要求代码交换的验证密钥 (PKCE)(必需)
  7. 保存并记录你的 消费者密钥(客户端 ID)和 消费者密钥密文(客户端密钥)
  • 在开发环境中,你可以使用 http://localhost:3000 URL,但生产环境需要 HTTPS
  • 回调 URL 必须与在 Better Auth 中配置的完全匹配
  • PKCE(用于代码交换的证明密钥)是 Salesforce 所要求的,并由提供者自动处理

对于沙箱测试,你可以在沙箱组织中创建连接应用,或者使用相同的连接应用,但在提供者配置中指定 environment: "sandbox"

配置提供程序

要配置提供程序,你需要导入该提供程序并将其传递给身份验证实例的 socialProviders 选项。

auth.ts
import { betterAuth } from "better-auth"

export const auth = betterAuth({
    socialProviders: {
        salesforce: { // [!code highlight]
            clientId: process.env.SALESFORCE_CLIENT_ID as string, // [!code highlight]
            clientSecret: process.env.SALESFORCE_CLIENT_SECRET as string, // [!code highlight]
            environment: "production", // or "sandbox" // [!code highlight]
        }, // [!code highlight]
    },
})

配置选项

  • clientId:你已连接应用的消费者密钥
  • clientSecret:你已连接应用的消费者密钥
  • environment"production"(默认)或 "sandbox"
  • loginUrl:自定义我的域名 URL(不含 https://)- 覆盖环境设置
  • redirectURI:如有需要,可重写自动生成的重定向 URI

高级配置

auth.ts
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
        },
    },
})
  • 使用 environment: "sandbox" 在 Salesforce 沙箱组织中进行测试
  • 启用 My Domain 的组织可以使用 loginUrl 选项
  • redirectURI 选项有助于解决重定向 URI 不匹配错误

环境变量

将以下环境变量添加到你的 .env.local 文件中:

.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

用于生产:

.env
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
auth-client.ts
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 错误:

  1. 检查回调 URL:确保你在 Salesforce 已连接的应用中的回调 URL 与你的 Better Auth 回调 URL 完全匹配
  2. 协议:确保你使用的是相同的协议(http://https://
  3. 端口:验证端口号是否匹配(例如,:3000
  4. 如有需要可覆盖:使用 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。

默认请求的权限范围是 openidemailprofile。提供者将自动包括 id 权限以访问基本用户信息。

On this page