【问题标题】:Get a user's API key for using in Slack获取用户的 API 密钥以在 Slack 中使用
【发布时间】:2018-02-06 11:59:43
【问题描述】:

所以我正在构建一个小型 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);

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

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

【问题讨论】:

  • 到目前为止您尝试过什么?请显示一些相关代码
  • 当然,我可以提供一些基本代码,但更多的是如何构建应用程序的问题。我看不到机器人和我网站上的用户帐户之间有什么链接。

标签: laravel slack-api


【解决方案1】:

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

所以在添加新的 API 令牌时有两种选择:

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

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

【讨论】:

  • 这很有意义!所以我可以简单地使用“将此应用程序安装到 Slack”来启动 oAuth 流程,然后将 Slack 凭据与其他 API 凭据一起存储?谢谢!
  • 没错。此外,我会将应用程序安装与将令牌添加到 3rd 方 API 服务分开。因为前者每个团队只需执行一次,而后者每个用户/每个用户和 API 一次
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
  • 2020-05-31
  • 2021-02-26
  • 1970-01-01
  • 2015-11-26
相关资源
最近更新 更多