🔐 Modulo 7: Autenticazione e Sicurezza
Proteggi la tua applicazione con sistemi di login professionali
🎯 Perché l’Autenticazione è Cruciale?
L’autenticazione non è un optional – è fondamentale per:
Protezione Dati
Accesso solo agli utenti autorizzati
Personalizzazione
Esperienza utente personalizzata
Tracciamento
Monitoraggio attività utente
Conformità
GDPR, privacy laws, sicurezza
💡 Autenticazione vs Autorizzazione
🔐 Autenticazione
“Chi sei?”
- Verifica identità utente
- Login/Password
- 2-Factor Authentication
- Esempio: Login nel sistema
🔑 Autorizzazione
“Cosa puoi fare?”
- Controlla permessi
- Ruoli e privilegi
- Accesso a risorse
- Esempio: Solo admin può eliminare utenti
🔄 Flusso di Autenticazione Step-by-Step
|
👤 Utente
Invia Credenziali
POST /login
Email + Password |
➜
|
🖥️ Server Flask
Riceve Request
Elabora i dati
|
|
🖥️ Flask-SQLAlchemy
Query Database
Cerca utente per email
|
➜
|
🗄️ Database
Restituisce Hash
Recupera password_hash
|
|
🗄️ Database
Hash Password
$2b$12$N7gdoEgC6r…
|
➜
|
🖥️ Flask-Bcrypt
Verifica Hash
check_password_hash()
|
|
🖥️ Flask-Login
Crea Sessione
login_user()
Set session cookie |
➜
|
👤 Utente
Login Successo!
Redirect a dashboard
Cookie salvato |
📝 Flusso di Registrazione Utente
|
👤 Nuovo Utente
Compila Form
Username, Email, Password
|
➜
|
🖥️ Flask-WTF
Validazione
Controlla campi
Verifica unicità |
|
🖥️ Bcrypt
Hash Password
generate_password_hash()
Sicurezza massima |
➜
|
🗄️ Database
Salva Utente
INSERT INTO users
Commit transaction |
|
🗄️ Database
Successo!
Utente creato
ID: 12345 |
➜
|
👤 Utente
Account Creato
Redirect a /login
Flash message |
🔑 Hashing delle Password con Bcrypt
MAI memorizzare password in chiaro! Usa sempre hashing.
pip install flask-bcrypt
from flask import Flask from flask_bcrypt import Bcrypt from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SECRET_KEY'] = 'tua-chiave-segreta-molto-complessa' # Inizializza Bcrypt bcrypt = Bcrypt(app) # Inizializza Database db = SQLAlchemy(app)
from app import db, bcrypt
from datetime import datetime
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
# ⚠️ NON memorizzare password in chiaro!
password_hash = db.Column(db.String(128), nullable=False)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
is_active = db.Column(db.Boolean, default=True)
is_admin = db.Column(db.Boolean, default=False)
# Property per gestire la password
@property
def password(self):
raise AttributeError('password non è un attributo leggibile')
@password.setter
def password(self, password):
# Hash della password prima di salvarla
self.password_hash = bcrypt.generate_password_hash(password).decode('utf-8')
def check_password(self, password):
# Verifica se la password corrisponde all'hash
return bcrypt.check_password_hash(self.password_hash, password)
def __repr__(self):
return f'<User {self.username}>'
✅ COME FARE
# Registrazione utente
new_user = User(
username='mario',
email='mario@email.com'
)
new_user.password = 'PasswordSicura123' # Auto-hash
db.session.add(new_user)
db.session.commit()
❌ COSA NON FARE
# ❌ SBAGLIATO!
new_user = User(
username='mario',
email='mario@email.com',
password_hash='PasswordInChiaro123' # 😱
)
✅ Modulo 7 Completato!
Ora sai proteggere la tua applicazione con sistemi di autenticazione professionali. Pronto per mettere online la tua app?
🎯 Cosa Aspettarti nell’Ultimo Modulo
Deploy su Server
Metti online la tua app Flask
Hosting Cloud
Heroku, AWS, PythonAnywhere
Configurazione
Domain, SSL, ambiente produzione