获取用户的 API 密钥以在 Slack 中使用

Get a user's API key for using in Slack

所以我正在构建一个小型 Slack 机器人,我希望多个用户能够在不同的 Slack 团队中使用它。到目前为止的工作流程是这样的:

  1. 用户在网站上注册。
  2. 用户连接到 API 提供商并接收他们的 OAuth 凭据。每个用户的访问令牌都保存在数据库中。
  3. 用户将 Slack 机器人添加到他们的团队。

使用硬编码的 API 值,机器人可以检索所需的数据,但是机器人能够为每个 Slack 团队获取适当数据的最佳方式是什么?

我显然不希望用户需要继续登录网站等,那么我如何将 slack 团队与 Laravel 用户相关联,然后提取相关的 API 数据?

对于一些示例代码,假设我在我的数据库中为用户存储了一个 Strava 访问令牌,我想调用 API:

$botman->hears('runstats', function ($bot) {
    $payload = \Strava\Account::get(
      \Auth::user()->strava_id,
      array('api_key' => "here_is_a_secret_key")
  );

$bot->reply($payload->monthly_kms);

当我登录到我的网站并从我的 Web 界面查询时,这工作正常,它返回 123km 作为示例。

显然,当我登录 Slack 时,没有 Auth::user 实例,因此它找不到相关的 Strava ID。这就是我希望能够为相关 Slack 用户检索的内容。我设想它被安装在多个 Slack 工作区中。

您需要在数据库中为每个 API 存储 Slack 用户(带有团队 ID、用户 ID)和他的个人令牌之间的关系。

所以在添加新的 API 代币时你有两个选择:

  • 确保为 API 服务添加新令牌的过程始终在 Slack 上启动(例如使用斜线命令),然后将用户转发到您的网页。因此,您的应用知道它是哪个用户。
  • 让用户使用他们的 Slack 凭据登录您的网页(使用 Slack Sign-in)。

当然,这两个选项都要求您的 Slack 应用程序之前已安装到相关团队。