Flux pour terminer l'authentification Slack avec Flask (Python)

J'ai essayé d'implémenter l'authentification Slack avec Flask. La plupart du temps, vous pouvez le voir en regardant le document officiel, mais je suis un peu confus quand je veux obtenir des informations sur l'utilisateur en même temps que l'authentification, donc je vais le laisser comme un mémorandum.

supposition

J'ai écrit en détail sur l'enregistrement de l'application Slack la dernière fois. https://qiita.com/svfreerider/items/0e1fe74c70e2047f0ce9

La plupart ne sont que le code dans la documentation officielle ci-dessous. https://slack.dev/python-slackclient/auth.html

Code source

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'

Préparez ʻauth.pypour implémenter la fonction d'authentification. Définissez le "client_id" et le "client_secret" que vous avez obtenus lorsque vous avez enregistré l'application Slack. En plus de cela, définissezscope`. scope spécifie la plage d'autorisations requises de l'utilisateur pour créer cette application. Il est également nécessaire de le paramétrer côté application. En outre, lors de la candidature, vous devez indiquer la raison pour laquelle «vous avez besoin de cette portée».

Dans mon cas, j'ai créé un bot et envoyé des notifications à partir de celui-ci, alors j'ai ajouté channels: read et chat: write: bot pour spécifier les canaux. J'ai également inclus ʻusers: read et ʻusers: read.email parce que je voudrais avoir les informations personnelles et l'adresse e-mail de l'utilisateur plus tard.

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)

Si vous faites cela, vous serez redirigé vers l'écran d'authentification Slack en accédant à / auth / redirect.

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
    )

Après "callback", utilisez le "code" à la fin de l'URL pour obtenir les informations de l'utilisateur. L'acquisition des utilisateurs se fait avec ʻoauth_access`.

Cependant, pour le moment, le nom et l'adresse e-mail de l'utilisateur n'ont pas encore été obtenus. Cette fois, nous allons appeler les informations détaillées de l'utilisateur séparément en utilisant le ʻoauth_token` acquis.

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)

Avec ʻusers_info`, vous pouvez obtenir toutes les informations souhaitées, telles que l'adresse e-mail et le nom de l'utilisateur, ainsi que l'image de l'icône et le fuseau horaire.

Ce n'est pas limité à Flask, mais je pense que Python peut être utilisé tel quel. J'ai essayé d'installer Flask il y a à peine deux semaines, mais en tant que personne qui fait des Rails depuis de nombreuses années, je n'ai aucune impression qu'il n'y a pas de documentation du tout.

À partir de maintenant, je pense que le nombre de cas de création d'applications avec l'apprentissage automatique + Flask augmentera sûrement, je vais donc le partager au besoin.

Recommended Posts

Flux pour terminer l'authentification Slack avec Flask (Python)
Comment télécharger avec Heroku, Flask, Python, Git (4)
Essayez l'authentification OAuth Slack avec Flask (API Slack V2)
Exemple de notification Slack avec python lambda
[Python] Mention à plusieurs personnes avec l'API de Slack
Programmation avec Python Flask
Comment télécharger avec Heroku, Flask, Python, Git (Partie 3)
Comment télécharger avec Heroku, Flask, Python, Git (Partie 2)
Connectez-vous à BigQuery avec Python
Publier de Python vers Slack
Authentification BASIC avec bouteille Python
Connectez-vous à Wikipedia avec Python
Basculer python vers 2.7 avec des alternatives
Écrire en csv avec Python
Application Web avec Python + Flask ② ③
Application Web avec Python + Flask ④
Publier sur Slack en Python
Python: comment utiliser async avec
Lien pour commencer avec python
[Python] Ecrire dans un fichier csv avec Python
Ravi de vous rencontrer avec python
Essayez d'exploiter Facebook avec Python
Sortie vers un fichier csv avec Python
Conversion MP3 → WAV avec Python
Pour faire une récursion avec Python2
Authentification de base, authentification Digest avec Flask
Comment démarrer avec Python
Que faire avec la sortie de PYTHON?
Comment calculer la date avec python
Publiez facilement sur Twitter avec Python 3
Je veux déboguer avec Python
Développement d'applications avec Docker + Python + Flask
J'ai essayé de résumer les remarques de tout le monde sur le slack avec wordcloud (Python)
Essayez de reproduire un film couleur avec Python
Essayez de vous connecter à qiita avec Python
Convertir un mémo à la fois avec Python 2to3
Correction pour réaliser facilement une connexion / déconnexion multifonctionnelle avec Python / Flask en utilisant Auth0
Les débutants en Python ont décidé de créer un bot LINE avec Flask (commentaire approximatif de Flask)
Mémo pour demander des KPI avec python
Analyse bidimensionnelle du flux de perméation saturée-insaturée avec Python
Client API Slack simple réalisé avec Python
Sortir les caractères de couleur en joli avec python
Authentification sans mot de passe avec RDS et IAM (Python)
Introduction au remplissage d'image Python Remplissage d'image à l'aide d'ImageDataGenerator
Sortie du journal Python vers la console avec GAE
Convertir des données Excel en JSON avec python
Convertir Hiragana en Romaji avec Python (bêta)
Fractal pour faire et jouer avec Python
Connectez-vous à MySQL avec Python dans Docker
Comment utiliser BigQuery en Python
[Introduction à Python] Utilisons foreach avec Python
Connectez-vous à Slack à l'aide de requêtes en Python
Caméra à pixel unique à expérimenter avec Python