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.
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
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éfinissez
scope`. 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