Intégrer @logto/rn avec expo-secure-store sur mobile #51

Closed
opened 2026-04-06 17:02:01 +00:00 by maximus · 1 comment
Owner

Contexte

Le sync mobile (#40) utilise un placeholder pour l'auth (userId direct). Il faut intégrer le vrai flow OAuth2 Logto.

Taches

  • Installer @logto/rn et expo-secure-store
  • Créer un adaptateur de stockage custom pour @logto/rn basé sur expo-secure-store (ne pas utiliser AsyncStorage pour les tokens)
  • Configurer l'app Logto pour React Native (redirect URI avec scheme simplliste://)
  • Implémenter le flow de login dans Settings > Compte (bouton "Se connecter")
  • Stocker l'access token (15 min) et refresh token dans expo-secure-store
  • Implémenter la rotation automatique du refresh token
  • Intercepteur HTTP pour refresh transparent (capturer 401, rafraîchir, relancer)
  • Remplacer le placeholder dans syncClient.ts par le vrai JWT Bearer
  • Implémenter la réconciliation Inbox au premier merge (remap ID hardcodé → ID serveur)
  • Écran de première connexion : choix merge local ou reset serveur
  • Tester sur un device Android réel

Notes

  • Nécessite un device réel (le flow OAuth ne fonctionne pas dans l'émulateur sans configuration spécifique)
  • L'app Logto doit être configurée avec le scheme simplliste://callback

Dépendances

Depends on #48 (config Logto)

## Contexte Le sync mobile (#40) utilise un placeholder pour l'auth (userId direct). Il faut intégrer le vrai flow OAuth2 Logto. ## Taches - [ ] Installer `@logto/rn` et `expo-secure-store` - [ ] Créer un adaptateur de stockage custom pour `@logto/rn` basé sur `expo-secure-store` (ne pas utiliser AsyncStorage pour les tokens) - [ ] Configurer l'app Logto pour React Native (redirect URI avec scheme `simplliste://`) - [ ] Implémenter le flow de login dans Settings > Compte (bouton "Se connecter") - [ ] Stocker l'access token (15 min) et refresh token dans expo-secure-store - [ ] Implémenter la rotation automatique du refresh token - [ ] Intercepteur HTTP pour refresh transparent (capturer 401, rafraîchir, relancer) - [ ] Remplacer le placeholder dans `syncClient.ts` par le vrai JWT Bearer - [ ] Implémenter la réconciliation Inbox au premier merge (remap ID hardcodé → ID serveur) - [ ] Écran de première connexion : choix merge local ou reset serveur - [ ] Tester sur un device Android réel ## Notes - Nécessite un device réel (le flow OAuth ne fonctionne pas dans l'émulateur sans configuration spécifique) - L'app Logto doit être configurée avec le scheme `simplliste://callback` ## Dépendances Depends on #48 (config Logto)
maximus added this to the spec-simpl-liste-web milestone 2026-04-06 17:02:01 +00:00
maximus added the
status:ready
type:feature
source:human
labels 2026-04-06 17:02:01 +00:00
Author
Owner

L'intégration Logto est déjà complète dans le code actuel :

  • @logto/rn v1.1.0 + expo-secure-store installés
  • logtoConfig.ts avec endpoint, appId sl-mobile-native, redirect URI simplliste://callback
  • authToken.ts — bridge token getter entre React tree et syncClient
  • Settings: sign-in flow (logtoSignIn), sign-out, sync now
  • _layout.tsx: LogtoProvider, token getter registration, sync polling
  • Écran première connexion: choix merge local / reset serveur
  • initialMerge() + initialReset() dans syncClient.ts

Implémenté dans les commits du milestone. Fermeture comme déjà résolu.

L'intégration Logto est déjà complète dans le code actuel : - ✅ `@logto/rn` v1.1.0 + `expo-secure-store` installés - ✅ `logtoConfig.ts` avec endpoint, appId `sl-mobile-native`, redirect URI `simplliste://callback` - ✅ `authToken.ts` — bridge token getter entre React tree et syncClient - ✅ Settings: sign-in flow (`logtoSignIn`), sign-out, sync now - ✅ `_layout.tsx`: `LogtoProvider`, token getter registration, sync polling - ✅ Écran première connexion: choix merge local / reset serveur - ✅ `initialMerge()` + `initialReset()` dans syncClient.ts Implémenté dans les commits du milestone. Fermeture comme déjà résolu.
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: maximus/simpl-liste#51
No description provided.