A Python library to simplify Discord OAuth2 authentication with Flask applications
Project description
FlaskDiscordAuth
Обзор
FlaskDiscordAuth - это Python-библиотека, разработанная для упрощения интеграции аутентификации Discord OAuth2 с приложениями Flask. Она предоставляет простой способ аутентификации пользователей через Discord, получения их основной информации, управления серверами и защиты маршрутов, требующих аутентификации.
Установка
pip install FlaskDiscordAuth
Требования
- Flask
- requests
Базовое использование
Вот простой пример использования FlaskDiscordAuth:
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
discord_auth = DiscordAuth(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI)
@app.route('/')
def home():
if 'user' in session:
user = session['user']
return f"Привет, {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['refresh_token'] = token_data.get('refresh_token')
session['scope'] = token_data.get('scope', '')
user_info = discord_auth.get_user_info(session['access_token'])
session['user'] = user_info
return redirect(url_for('home'))
@app.route('/logout')
def logout():
access_token = session.get('access_token')
if access_token:
discord_auth.revoke_token(access_token)
session.clear()
return redirect(url_for('home'))
if __name__ == '__main__':
app.run(debug=True)
Защита маршрутов
Вы можете использовать предоставленные декораторы для защиты маршрутов:
@app.route('/profile')
@discord_auth.login_required
def profile():
user = session['user']
return f"Профиль пользователя {user['username']}"
@app.route('/moderator')
@discord_auth.guilds_required('1234567890', '0987654321')
def moderator_panel():
return "Панель модератора"
Расширенные возможности
Получение серверов пользователя
@app.route('/guilds')
@discord_auth.login_required
def user_guilds():
access_token = session.get('access_token')
guilds = discord_auth.get_user_guilds(access_token)
return f"Вы состоите в {len(guilds)} серверах"
Динамические scopes
@app.route('/login_with_guilds')
def login_with_guilds():
return redirect(discord_auth.get_login_url(scope='identify email guilds'))
Обновление токена
refresh_token = session.get('refresh_token')
if refresh_token:
new_tokens = discord_auth.refresh_token(refresh_token)
session['access_token'] = new_tokens['access_token']
session['refresh_token'] = new_tokens['refresh_token']
Получение баннера и аватара пользователя
Библиотека теперь поддерживает получение дополнительной информации о пользователе, включая баннер:
user_info = discord_auth.get_user_info(access_token)
banner_url = f"https://cdn.discordapp.com/banners/{user_info['id']}/{user_info['banner']}.png" if user_info.get('banner') else None
avatar_url = f"https://cdn.discordapp.com/avatars/{user_info['id']}/{user_info['avatar']}.png" if user_info.get('avatar') else None
Сохранение scope
Библиотека автоматически сохраняет scope в сессии, что позволяет проверять доступные разрешения:
# Проверка наличия scope guilds
has_guilds_scope = 'guilds' in session.get('scope', '')
Улучшенная обработка ошибок
Декоратор guilds_required автоматически загружает информацию о серверах пользователя, если она отсутствует в сессии.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file flaskdiscordauth-0.2.0.tar.gz.
File metadata
- Download URL: flaskdiscordauth-0.2.0.tar.gz
- Upload date:
- Size: 8.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2a87aa3b92cfab08b03e5be9a129d4210752d23b1ca877a92aab069852f226ab
|
|
| MD5 |
67b8d1dc220935bc74d74c8a5d322a14
|
|
| BLAKE2b-256 |
1cc9063a9cb51128410bbc38b4a5113219618a3eed870755f03549d6b002ac93
|
File details
Details for the file flaskdiscordauth-0.2.0-py3-none-any.whl.
File metadata
- Download URL: flaskdiscordauth-0.2.0-py3-none-any.whl
- Upload date:
- Size: 5.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
652d3c706d16e268a47f00cf2886f908d80fa93314b55bf6bf2ac31be418a9b7
|
|
| MD5 |
31b211198a76a18b23306b9d212316e6
|
|
| BLAKE2b-256 |
8861c7ec07a8fb84ee7016829f80d641d72bc0b405a2149961dfc50bfea8fb20
|