Ich habe versucht, die Slack-Authentifizierung mit Flask zu implementieren. Wenn Sie sich das offizielle Dokument ansehen, können Sie es im Allgemeinen weitergeben. Es gibt jedoch einige Teile, die etwas verwirrend sind, wenn Sie Benutzerinformationen gleichzeitig mit der Authentifizierung abrufen möchten. Daher werde ich es als Memorandum belassen.
Ich habe letztes Mal ausführlich über die Registrierung der Slack-App geschrieben. https://qiita.com/svfreerider/items/0e1fe74c70e2047f0ce9
Die meisten sind nur der Code in der offiziellen Dokumentation unten. https://slack.dev/python-slackclient/auth.html
auth.py
import functools
import pdb
import slack
from flask import (
Blueprint, flash, g, redirect, render_template, request, session, url_for
)
from app.db import (
search_user, register_user, search_team, register_team, search_team_user, register_team_user
)
bp = Blueprint('auth', __name__, url_prefix='/auth')
client_id = 'XXXXXXXXXXXXXXX'
client_secret = 'XXXXXXXXXXXXXXX'
oauth_scope = 'channels:read,chat:write:bot,users:read,users:read.email'
Bereiten Sie "auth.py" vor, um die Authentifizierungsfunktion zu implementieren. Definieren Sie die "client_id" und "client_secret", die Sie bei der Registrierung der Slack-App erhalten haben. Definieren Sie außerdem "Umfang". Der Bereich gibt den Bereich der Berechtigungen an, die der Benutzer zum Erstellen dieser App benötigt. Es ist auch notwendig, es auf der Anwendungsseite einzustellen. Bei der Bewerbung müssen Sie außerdem den Grund angeben, warum Sie diesen Bereich benötigen.
In meinem Fall habe ich einen Bot erstellt und Benachrichtigungen von ihm gesendet. Daher habe ich "Kanäle: Lesen" und "Chat: Schreiben: Bot" hinzugefügt, um die Kanäle anzugeben. Ich habe auch "users: read" und "users: read.email" hinzugefügt, da ich später die persönlichen Informationen und die E-Mail-Adresse des Benutzers haben möchte.
auth.py
@bp.route('/redirect', methods=['GET'])
def authorize():
authorize_url = f"https://slack.com/oauth/authorize?scope={ oauth_scope }&client_id={ client_id }"
return redirect(authorize_url)
Wenn Sie dies tun, werden Sie zum Slack-Authentifizierungsbildschirm umgeleitet, indem Sie zu "/ auth / redirect" navigieren.
auth.py
@bp.route('/callback', methods=["GET", "POST"])
def callback():
auth_code = request.args['code']
client = slack.WebClient(token="")
oauth_info = client.oauth_access(
client_id=client_id,
client_secret=client_secret,
code=auth_code
)
Verwenden Sie nach "Rückruf" den "Code" am Ende der URL, um die Benutzerinformationen abzurufen. Die Benutzerakquise erfolgt mit oauth_access
.
Zu diesem Zeitpunkt wurden jedoch noch keine Informationen zum Namen und zur E-Mail-Adresse des Benutzers abgerufen. Dieses Mal werden wir die detaillierten Informationen des Benutzers separat mit dem erfassten "oauth_token" aufrufen.
auth.py
access_token = oauth_info['access_token']
client = slack.WebClient(token=access_token)
user_id = oauth_info['user_id']
response = client.users_info(user=user_id)
Mit users_info
können Sie alle gewünschten Informationen abrufen, z. B. die E-Mail-Adresse und den Namen des Benutzers sowie das Symbolbild und die Zeitzone.
Dies ist nicht auf Flask beschränkt, aber ich denke, dass Python so verwendet werden kann, wie es ist. Ich habe vor zwei Wochen versucht, Flask zu installieren, aber als Person, die seit vielen Jahren Rails macht, habe ich keinen Eindruck davon, dass es überhaupt keine Literatur gibt.
Von nun an denke ich, dass die Anzahl der Fälle, in denen Apps mit maschinellem Lernen + Flask erstellt werden, sicherlich zunehmen wird, sodass ich sie nach Bedarf weitergeben werde.
Recommended Posts