Se connecter
Un écran login envoie email/mot de passe à /api/auth/login et reçoit un JWT.
Future<String> login(String email, String mdp) async { final r = await http.post(Uri.parse('$_base/auth/login'), headers: {'Content-Type': 'application/json'}, body: jsonEncode({'email': email, 'motDePasse': mdp})); return jsonDecode(r.body)['token']; }
Stocker le jeton en sécurité
On stocke le JWT avec flutter_secure_storage (chiffré par l'OS), jamais en clair dans un fichier ordinaire.
await storage.write(key: 'jwt', value: token);
Envoyer le jeton
Chaque requête protégée porte l'en-tête Authorization.
headers: { 'Authorization': 'Bearer $token' }
L'état de connexion
Un AuthProvider (ChangeNotifier) expose l'utilisateur connecté ; l'UI adapte l'affichage (bouton « ouvrir une campagne » réservé au coordinateur, écran login si non connecté).
Implémente login/inscription, stocke le JWT (secure storage), injecte l'en-tête dans CampagneService, et conditionne les actions selon le rôle. L'appli parle maintenant à l'API sécurisée — la boucle Mongo → Spring → Flutter est bouclée.
🎉 Parcours Flutter terminé
Des widgets de base jusqu'à une appli mobile connectée, sécurisée et publiable, tu as construit le client du projet Fioul Groupé. Les trois technos se rejoignent : le produit est complet. Reste à le versionner et le présenter — voir le parcours Forge et le guide pas à pas.
- Login → JWT ; stockage chiffré (
flutter_secure_storage). - En-tête
Authorization: Bearersur les requêtes protégées. - État de connexion via un provider ; le serveur reste l'autorité des rôles.