Flow, um die Slack-Authentifizierung mit Flask (Python) abzuschließen

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.

Annahme

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

Quellcode

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

Flow, um die Slack-Authentifizierung mit Flask (Python) abzuschließen
Hochladen mit Heroku, Flask, Python, Git (4)
Versuchen Sie eine lockere OAuth-Authentifizierung mit einem Kolben (Slack API V2).
Beispiel für eine Slack-Benachrichtigung mit Python Lambda
[Python] Erwähnen Sie mit der Slack-API mehrere Personen
Programmieren mit Python Flask
Hochladen mit Heroku, Flask, Python, Git (Teil 3)
Hochladen mit Heroku, Flask, Python, Git (Teil 2)
Stellen Sie mit Python eine Verbindung zu BigQuery her
Post von Python nach Slack
BASIC-Authentifizierung mit Python-Flasche
Stellen Sie mit Python eine Verbindung zu Wikipedia her
Schalten Sie Python mit Alternativen auf 2.7 um
Schreiben Sie mit Python in csv
Webanwendung mit Python + Flask ② ③
Webanwendung mit Python + Flask ④
Post an Slack in Python
Python: So verwenden Sie Async mit
Link, um mit Python zu beginnen
[Python] Mit Python in eine CSV-Datei schreiben
Schön dich mit Python zu treffen
Versuchen Sie, Facebook mit Python zu betreiben
Ausgabe in eine CSV-Datei mit Python
MP3 → WAV-Konvertierung mit Python
Schwanzrekursion mit Python2 durchführen
Basisauthentifizierung, Digest-Authentifizierung mit Flask
Erste Schritte mit Python
Was tun mit PYTHON Release?
So berechnen Sie das Datum mit Python
Mit Python 3 einfach auf Twitter posten
Ich möchte mit Python debuggen
Anwendungsentwicklung mit Docker + Python + Flask
Ich habe versucht, alle Bemerkungen von Slack mit Wordcloud (Python) zusammenzufassen.
Versuchen Sie, Farbfilme mit Python zu reproduzieren
Versuchen Sie, sich mit Python bei qiita anzumelden
Konvertieren Sie Memos sofort mit Python 2to3
Es wurde ein Fehler behoben, der das einfache multifunktionale An- und Abmelden mit Python / Flask mithilfe von Auth0 ermöglichte
Python-Anfänger haben beschlossen, einen LINE-Bot mit Flask zu erstellen (Flask-Kommentar)
Memo, um nach KPI mit Python zu fragen
Zweidimensionale Analyse des gesättigten und ungesättigten Permeationsflusses mit Python
Einfacher Slack API-Client mit Python
Geben Sie Farbzeichen mit Python zu hübsch aus
Passwortlose Authentifizierung mit RDS und IAM (Python)
Einführung in das Auffüllen von Python-Bildern Auffüllen von Bildern mit ImageDataGenerator
Python-Protokoll mit GAE an die Konsole ausgeben
Konvertieren Sie Excel-Daten mit Python in JSON
Konvertiere Hiragana mit Python (Beta) in Romaji
Fraktal zum Erstellen und Spielen mit Python
Stellen Sie mit Python in Docker eine Verbindung zu MySQL her
So arbeiten Sie mit BigQuery in Python
[Einführung in Python] Verwenden wir foreach mit Python
Melden Sie sich mit Anforderungen in Python bei Slack an
Einzelpixel-Kamera zum Erleben mit Python