Исходник FlaskDiscordAuth

fakelag28

Участник
Автор темы
46
67
FlaskDiscordAuth | GitHub

Python библиотека для простой интеграции аутентификации Discord OAuth2 в приложения Flask.

Эта библиотека предоставляет удобный способ аутентификации пользователей через Discord, получения информации об аккаунте, управления серверами и защиты маршрутов с минимальной конфигурацией.




Ключевые особенности

  • Простая интеграция: Минимальная настройка для начала работы
  • Защита маршрутов: Декораторы для проверки аутентификации и прав на серверах Discord
  • Расширенная информация: Получение аватара, баннера и других данных аккаунта
  • Управление сессией: Автоматическое сохранение токенов и scope
  • Обновление токенов: Поддержка обновления access token через refresh token




Установка

Установите библиотеку через pip:
Bash:
pip install FlaskDiscordAuth




Базовое использование

Python:
from flask import Flask, redirect, url_for, session, request
from FlaskDiscordAuth.discord_auth import DiscordAuth

app = Flask(__name__)
app.secret_key = 'your_secret_key'

# Настройки Discord
CLIENT_ID = 'your_client_id'
CLIENT_SECRET = 'your_client_secret'
REDIRECT_URI = 'http://127.0.0.1:5000/callback'

discord_auth = DiscordAuth(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI)

@app.route('/')
def home():
    if 'user' in session:
        return f"Привет, {session['user']['username']}!"
    return 'Добро пожаловать! <a href="/login">Войти через Discord</a>'

@app.route('/login')
def login():
    return redirect(discord_auth.get_login_url())

@app.route('/callback')
def callback():
    code = request.args.get('code')
    token_data = discord_auth.get_token(code)
    session['access_token'] = token_data['access_token']
    session['user'] = discord_auth.get_user_info(session['access_token'])
    return redirect(url_for('home'))

if __name__ == '__main__':
    app.run(debug=True)




Защита маршрутов

Python:
@app.route('/profile')
@discord_auth.login_required
def profile():
    return f"Профиль пользователя {session['user']['username']}"

@app.route('/moderator')
@discord_auth.guilds_required('1234567890')
def moderator_panel():
    return "Панель модератора"




Расширенные возможности

Получение серверов пользователя:
Python:
guilds = discord_auth.get_user_guilds(access_token)

Динамические scopes:
Python:
redirect(discord_auth.get_login_url(scope='identify email guilds'))

Получение баннера и аватара:
Python:
banner_url = f"https://cdn.discordapp.com/banners/{user_info['id']}/{user_info['banner']}.png"
avatar_url = f"https://cdn.discordapp.com/avatars/{user_info['id']}/{user_info['avatar']}.png"




Документация
 

chromiusj

модерирую шмодерирую
Модератор
5,951
4,282
фласк: 👎👎👎
фастапи:👍👍👍
лайтстар:❤️❤️❤️