Slack Bolt Python 机器人用户和用户 OAuth 令牌

问题描述 投票:0回答:1

通过slack bolt python初始化slack app的方法是

app = App(token = SLACK_BOT_TOKEN, signing_secret = SLACK_SIGNING_SECRET)

在这种情况下,应用程序只有机器人令牌范围。

需要机器人令牌范围和用户令牌范围的松弛应用程序呢?创建两个应用程序实例?如何初始化具有两个作用域的应用程序?谢谢

python slack slack-api
1个回答
0
投票

如果您通过您的帐户创建了 slack 应用程序并将 slack 应用程序安装到您的工作区,您将能够从 Slack 应用程序仪表板的 OAuth 部分获取用户令牌。但是,以上仅适用于单个用户。

如果您希望您的应用程序在多个工作区中使用。您可以设置 OAuth 流程,该流程由具有用户和机器人令牌范围的

slack-bolt
框架支持,并且可以使用
context.bot_token
context.user_token
访问应用程序中的值。阅读更多这里.

下面是使用

slack-bolt
Flask

设置 OAuth 流程的基本示例
import os
from slack_bolt import App
from slack_bolt.oauth.oauth_settings import OAuthSettings
from slack_sdk.oauth.installation_store.file import FileInstallationStore
from slack_sdk.oauth.state_store.file import FileOAuthStateStore
from slack_bolt.adapter.flask import SlackRequestHandler
from flask import Flask, request

# oauth settings with all required parameters
oauth_settings = OAuthSettings(
    client_id = os.getenv("SLACK_CLIENT_ID"),
    scopes = ["commands","files:read","users:read","users:read.email","chat:write"],
    user_scopes = ["files:read"],
    redirect_uri = None,
    install_page_rendering_enabled = False,
    install_path = "/slack/install",
    redirect_uri_path = "/slack/oauth_redirect",
    installation_store = FileInstallationStore(base_dir="./data/installations"),
    state_store = FileOAuthStateStore(expiration_seconds=600, base_dir="./data/states")
)

# Initializes your app
app = App(
    signing_secret=os.getenv("SLACK_SIGNING_SECRET"),
    oauth_settings=oauth_settings
)

flask_app = Flask(__name__)
handler = SlackRequestHandler(app)

# endpoint for handling all slack events
@flask_app.route("/slack/events", methods=["POST"])
def slack_events():
    return handler.handle(request)

# endpoint for handling app install
@flask_app.route("/slack/install", methods=["GET"])
def install():
    return handler.handle(request)

# for oauth redirect
@flask_app.route("/slack/oauth_redirect", methods=["GET"])
def oauth_redirect():
    return handler.handle(request)

if __name__ == "__main__":
  flask_app.run(debug=True,host="0.0.0.0", port=8080)
© www.soinside.com 2019 - 2024. All rights reserved.