ScaleRocket/Mobile

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)/ :

EcranFichierDescription
Connexionlogin.tsxEmail/mot de passe + boutons OAuth Google/Apple
Inscriptionregister.tsxCréation de compte avec nom complet optionnel
Mot de passe oubliéforgot-password.tsxRé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.ts

Google 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

  1. Allez dans Supabase Dashboard > Authentication > Providers > Google
  2. Activez le provider Google
  3. Créez des identifiants OAuth dans la Google Cloud Console
  4. Ajoutez le Client ID et le Secret dans Supabase
  5. 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

  1. Configurez Google OAuth dans votre dashboard Convex
  2. Ajoutez les identifiants OAuth à votre configuration auth Convex dans convex/auth.ts
  3. 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 directement

Apple 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

  1. Activez le provider Apple dans votre dashboard backend
  2. Configurez un Service ID dans votre compte Apple Developer
  3. 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'étatonAuthStateChange met à 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 :

  1. Au lancement, useSession() vérifie s'il existe une session
  2. Pendant la vérification, un spinner de chargement est affiché
  3. Pas de session trouvée — redirige vers /(auth)/login
  4. Session trouvée — redirige vers /(tabs) (dashboard)
  5. Les changements de session sont gérés automatiquement via l'écouteur d'état

On this page