我有一个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流中的响应之一。
任何人都可以在这里帮助我。 我使按钮正常工作,但这也应该工作。
答案 0 :(得分:1)
据我了解,让我尝试为您的问题提供更完整的答案。
要求
您有一个网站,希望Slack团队中的用户能够从该网站向Slack发送消息。
消息必须代表用户发送,而不是从应用程序发送
解决方案
要进行身份验证并获取闲置的用户ID,用户需要使用“ Sign-in with Slack”登录您的网站
当用户想要发送消息时,您的网站会在其数据库中检查属于当前用户的访问令牌(松弛用户ID是密钥),然后使用该令牌通过来发送松弛消息带有chat.postMessage
如果网站在其数据库中找不到当前用户的令牌,则需要创建该令牌。为此,向用户显示一个启动Oauth flow with Slack requesting the required permission的按钮(例如,“授予网站访问权限”)。创建令牌后,令牌将存储在网站的数据库中,因此该过程仅需对每个用户运行一次。然后,用户可以发送他的消息。
注释
答案 1 :(得分:0)
这不起作用。该按钮触发用户通过Oauth 2.0安装Slack应用。根据定义,Oauth进程不能在后台运行,而是要求用户遵循从Slack重定向到登录页面的方式,并批准为Slack应用程序请求的权限。