向Slack请求范围以获取消息

时间:2018-07-18 21:14:16

标签: slack-api

我有一个Slack应用程序,直到昨天,只有主所有者才能发送消息。我问过Slack团队如何解决此问题,以使所有用户都能够在Slack上发送消息。答案是首先使用“使用Slack登录”按钮登录它们,然后使用另一个具有不同作用域的按钮。

我的问题是,我可以按以下方式以用户身份发送消息:

<input type="button" value="Authenticate again to send Message" class="btn btn-warning" onclick="location.href = 'https://slack.com/oauth/authorize?scope=incoming-webhook,im:write,chat:write:user&client_id=xxyyzz'"/>

现在,我正在尝试通过显示“请稍候”的视图在后台执行相同的额外范围请求

附加以下代码:

<script>
        $.ajax({
            method: "GET",
            dataType: "json",
            url: "@Url.Action(MenuItem, "SetupSlack")",
            //data: { code: 'Model.Code' },
            data: { code: '@Model' },
            success: function(rsp) {
                window.location.replace(rsp.redirect);

            },
            error: function() {
                // Show error.
            }
        });
</script>

控制器代码如下:

 public ActionResult SetupSlack(string code)
        {
            SlackAuthToken slackToken = slackService.GetAccessToken( clientId, clientSecret, code);

            string redirectUrl;
            if (slackToken.IsAuthenticated && slackToken.HasWrite)
            {
                Alert("Slack setup successfully!!!!", AlertLevel.Success);
                redirectUrl = Url.Action(MenuItem, "Index");
            }
            else if (slackToken.IsAuthenticated)
            {
                redirectUrl = "https://slack.com/oauth/authorize?scope=incoming-webhook,im:write,chat:write:user&client_id=aabbcc";

            }
            else
            {
                Alert("Slack setup failed. Please try again, if the problem persists please contact support.", AlertLevel.Success);
                redirectUrl = Url.Action(MenuItem, "Index");
            }
            return JsonNet(new { redirect = redirectUrl });
        }

它并没有进入邮件验证页面。另外,另一个错误是使它“已使用代码”作为OAuth流中的响应之一。

任何人都可以在这里帮助我。 我使按钮正常工作,但这也应该工作。

2 个答案:

答案 0 :(得分:1)

据我了解,让我尝试为您的问题提供更完整的答案。

要求

  1. 您有一个网站,希望Slack团队中的用户能够从该网站向Slack发送消息。

  2. 消息必须代表用户发送,而不是从应用程序发送

解决方案

  1. 要进行身份验证并获取闲置的用户ID,用户需要使用“ Sign-in with Slack”登录您的网站

  2. 当用户想要发送消息时,您的网站会在其数据库中检查属于当前用户的访问令牌(松弛用户ID是密钥),然后使用该令牌通过来发送松弛消息带有chat.postMessage

  3. 的API
  4. 如果网站在其数据库中找不到当前用户的令牌,则需要创建该令牌。为此,向用户显示一个启动Oauth flow with Slack requesting the required permission的按钮(例如,“授予网站访问权限”)。创建令牌后,令牌将存储在网站的数据库中,因此该过程仅需对每个用户运行一次。然后,用户可以发送他的消息。

注释

  • 第3步中的Oauth流程与为每个用户安装Slack应用程序基本相同。这称为配置。这只有在您的Slack团队的管理员已授予所有用户安装此特定Slack应用程序的权限的情况下才有效
  • 第3步中的Oauth流程,由于您需要直接的用户交互,因此无法按照您在问题中所建议的那样在后台运行。始终需要用户首先登录,然后批准您的Slack应用程序所请求的权限。

答案 1 :(得分:0)

这不起作用。该按钮触发用户通过Oauth 2.0安装Slack应用。根据定义,Oauth进程不能在后台运行,而是要求用户遵循从Slack重定向到登录页面的方式,并批准为Slack应用程序请求的权限。