Код: Выделить всё
supabase: Client = create_client(supabase_url, supabase_key)
# Decorator personalizzato login_required
def login_required(f):
def wrapper(*args, **kwargs):
if 'user' not in session:
return redirect(url_for('login'))
return f(*args, **kwargs)
return wrapper
@app.route('/')
def home():
if 'user' in session:
return redirect('/dashboard')
return '''
[url=/login/github]Login with GitHub[/url]
[url=/login/google]Login with Google[/url]
[url=/login/microsoft]Login with Microsoft[/url]
''' # Pulsanti di login per ogni provider
@app.route('/login/
')
def login(provider):
# Reindirizza l'utente al link di login di Supabase con il provider scelto
redirect_uri = url_for('callback', _external=True)
auth_url = f"{supabase_url}/auth/v1/authorize?provider={provider}&redirect_to={redirect_uri}"
logging.info(f"Redirect URL: {auth_url}") # Aggiungi il log per vedere l'URL di redirect
return redirect(auth_url)
@app.route('/callback')
def callback():
# Gestione del callback dopo il login con il provider (GitHub, Google, Microsoft)
code = request.args.get('code')
if code:
try:
# Completa il login utilizzando il codice ricevuto
auth_response = supabase.auth.exchange_code_for_session(code)
user = supabase.auth.user()
# Salva i dati dell'utente nella sessione
session['user'] = user
logging.info(f"User info: {user}") # Aggiungi log per vedere i dati dell'utente
# Salva o aggiorna l'utente nel database
user_data = {
'email': user['email'],
'name': user['user_metadata']['full_name'],
}
# Puoi anche inserire o aggiornare l'utente nel database Supabase
# supabase.table('users').upsert([user_data]).execute()
return redirect('/dashboard') # Reindirizza alla dashboard dopo il login
except Exception as e:
logging.error(f"Error during authentication: {str(e)}") # Log degli errori
return "Authentication failed", 400
return "Authentication failed", 400
@app.route('/dashboard')
def dashboard():
if 'user' in session:
# Mostra un messaggio di benvenuto all'utente loggato
return f'Sei loggato, {session["user"]["user_metadata"]["full_name"]}! [url=/logout]Logout[/url]'
return redirect('/') # Se l'utente non è loggato, reindirizza alla home
@app.route('/logout')
def logout():
session.clear()
return redirect('/')
if __name__ == '__main__':
logging.basicConfig(level=logging.INFO) # Imposta il livello di log
app.run(debug=True, port=5000)
Подробнее здесь: https://stackoverflow.com/questions/793 ... g-supabase
Мобильная версия