Slack

Slack 提供者的设置和使用说明。

获取你的 Slack 凭证

要使用 Slack 作为社交提供者,你需要创建一个 Slack 应用并获取你的凭证。

  1. 前往 Slack API 的应用页面 并点击“创建新应用”
  2. 选择“从零开始”,为你的应用命名并选择一个开发工作区
  3. 在应用设置中,导航到“OAuth & Permissions”
  4. 在“重定向 URL”下,添加你的重定向 URL:
    • 开发环境:http://localhost:3000/api/auth/callback/slack
    • 生产环境:https://yourdomain.com/api/auth/callback/slack
  5. 从“基本信息”页面复制你的客户端 ID 和客户端密钥

在生产环境中,Slack 要求重定向 URL 使用 HTTPS。在本地开发时,你可以使用 ngrok 等工具创建安全隧道。

配置提供者

要配置该提供者,需要将 clientId 和 clientSecret 传递给 socialProviders.slack:

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

export const auth = betterAuth({
    socialProviders: {
        slack: { 
            clientId: process.env.SLACK_CLIENT_ID as string, 
            clientSecret: process.env.SLACK_CLIENT_SECRET as string, 
        }, 
    },
})

使用

使用 Slack 登录

要使用 Slack 登录,可以调用客户端提供的 signIn.social 函数。signIn 接受一个包含以下属性的对象:

  • provider:要使用的提供者,应设置为 slack。
auth-client.ts
import { createAuthClient } from "better-auth/client";
const authClient = createAuthClient();

const signIn = async () => {
  const data = await authClient.signIn.social({ provider: "slack" });
};

请求额外权限范围

默认情况下,Slack 使用 OpenID Connect 权限范围:openid、profile 和 email。你可以在登录时请求额外的 Slack 权限:

auth-client.ts
const signInWithSlack = async () => {
  await authClient.signIn.social({
    provider: "slack",
    scopes: ["channels:read", "chat:write"], // 额外的 Slack API 权限
  });
};

限定工作区登录

如果你想限制登录到特定的 Slack 工作区,可以传递 team 参数:

auth.ts
socialProviders: {
    slack: {
        clientId: process.env.SLACK_CLIENT_ID as string,
        clientSecret: process.env.SLACK_CLIENT_SECRET as string,
        team: "T1234567890", // 你的 Slack 工作区 ID
    },
}

登录后使用 Slack API

认证成功后,你可以通过会话访问用户的 Slack 信息。访问令牌可用于向 Slack API 发起请求:

const session = await authClient.getSession();
if (session?.user) {
  // 访问 Slack 特定数据
  const slackUserId = session.user.id; // 这是 Slack 用户 ID
  // 访问令牌安全存储于服务器端
}

Slack 提供者默认使用 OpenID Connect,它提供了基础的用户信息。如果需要访问其他 Slack API,请确保在登录时请求相应的权限范围。