Authentification
Configurer l'email/mot de passe, Google OAuth et Apple Sign-In pour votre app mobile.
Authentification
ScaleRocket Mobile inclut un flux d'authentification complet avec email/mot de passe, Google OAuth et Apple Sign-In.
Ecrans d'authentification
Le boilerplate inclut trois écrans d'auth dans app/(auth)/ :
| Ecran | Fichier | Description |
|---|---|---|
| Connexion | login.tsx | Email/mot de passe + boutons OAuth Google/Apple |
| Inscription | register.tsx | Création de compte avec nom complet optionnel |
| Mot de passe oublié | forgot-password.tsx | Réinitialisation par email |
Email/mot de passe
L'authentification par email et mot de passe fonctionne directement. Les écrans de connexion et d'inscription incluent la validation et la gestion d'erreurs.
// lib/auth.ts
import { supabase } from "./supabase";
export async function signIn(email: string, password: string) {
const { error } = await supabase.auth.signInWithPassword({ email, password });
if (error) throw error;
}
export async function signUp(email: string, password: string, fullName?: string) {
const { error } = await supabase.auth.signUp({
email,
password,
options: { data: { full_name: fullName } },
});
if (error) throw error;
}// lib/auth.ts
import { useConvexAuth } from "convex/react";
export function useSession() {
const { isAuthenticated, isLoading } = useConvexAuth();
return { isAuthenticated, loading: isLoading };
}
// La connexion et l'inscription sont gérées par le provider d'auth Convex
// configuré dans convex/auth.tsGoogle OAuth
Google OAuth ouvre le navigateur de l'appareil pour la connexion et redirige vers l'app via le schéma deep link scalerocket://.
Configuration
- Allez dans Supabase Dashboard > Authentication > Providers > Google
- Activez le provider Google
- Créez des identifiants OAuth dans la Google Cloud Console
- Ajoutez le Client ID et le Secret dans Supabase
- Ajoutez
scalerocket://à vos URLs de redirection Supabase
Code
import { makeRedirectUri } from "expo-linking";
export async function signInWithOAuth(provider: "google" | "apple") {
const redirectUrl = makeRedirectUri({ scheme: "scalerocket" });
const { error } = await supabase.auth.signInWithOAuth({
provider,
options: { redirectTo: redirectUrl },
});
if (error) throw error;
}Configuration
- Configurez Google OAuth dans votre dashboard Convex
- Ajoutez les identifiants OAuth à votre configuration auth Convex dans
convex/auth.ts - Définissez l'URL de redirection sur
scalerocket://
Code
// Google OAuth est configuré dans convex/auth.ts
// L'écran de connexion appelle le provider d'auth Convex directementApple Sign-In
Apple Sign-In est requis pour les apps iOS qui proposent une connexion tierce. Il est affiché conditionnellement uniquement sur les appareils iOS.
import { Platform } from "react-native";
{Platform.OS === "ios" && (
<TouchableOpacity onPress={() => signInWithOAuth("apple")}>
<Text>Sign in with Apple</Text>
</TouchableOpacity>
)}Configuration
- Activez le provider Apple dans votre dashboard backend
- Configurez un Service ID dans votre compte Apple Developer
- Ajoutez le Service ID aux paramètres du provider de votre backend
Important : Apple exige que toute app proposant une connexion tierce (comme Google) doit aussi proposer Apple Sign-In. Votre app peut être rejetée de l'App Store sans cela.
Gestion des sessions
Les sessions sont gérées automatiquement :
- Stockage — Les tokens sont stockés dans
expo-secure-store(chiffré sur l'appareil) - Rafraîchissement auto — Les tokens sont rafraîchis avant expiration
- Persistance — Les sessions survivent aux redémarrages de l'app
- Ecouteur d'état —
onAuthStateChangemet à jour l'UI en temps réel - Déconnexion — Efface la session et redirige vers la connexion
Garde d'authentification
Le layout racine (app/_layout.tsx) contient la garde d'auth :
- Au lancement,
useSession()vérifie s'il existe une session - Pendant la vérification, un spinner de chargement est affiché
- Pas de session trouvée — redirige vers
/(auth)/login - Session trouvée — redirige vers
/(tabs)(dashboard) - Les changements de session sont gérés automatiquement via l'écouteur d'état