Comment configurer Appwrite sur Expo React Native

Par coderoe · 8 min de lecture

React Native
Comment configurer Appwrite sur Expo React Native

Dans ce tutoriel, nous allons intégrer Appwrite comme backend dans une application Expo React Native. Appwrite est une plateforme Backend-as-a-Service (BaaS) open-source qui fournit authentification, base de données, stockage de fichiers et bien plus encore.

1. Prérequis

Avant de commencer, assurez-vous d'avoir :

  • Node.js installé (version 16 ou supérieure)
  • Un projet Expo React Native existant
  • Un compte Appwrite (gratuit sur cloud.appwrite.io ou auto-hébergé)

2. Installer les dépendances nécessaires

Commencez par installer les packages nécessaires :

npx expo install react-native-appwrite react-native-url-polyfill
  • react-native-appwrite : SDK officiel Appwrite pour React Native
  • react-native-url-polyfill : Polyfill requis pour le bon fonctionnement d'Appwrite

3. Créer un projet Appwrite

  1. Connectez-vous à votre console Appwrite (cloud.appwrite.io)
  2. Cliquez sur "Create Project"
  3. Donnez un nom à votre projet (ex: "MonAppExpo")
  4. Notez votre Project ID (vous en aurez besoin)
  5. Dans les paramètres, ajoutez une plateforme :
    • Sélectionnez "Android" ou "iOS"
    • Pour Android : entrez votre package name (ex: com.votreapp.expo)
    • Pour iOS : entrez votre bundle ID

4. Configurer le SDK Appwrite

Créez un fichier pour configurer Appwrite dans votre projet :

src/lib/appwrite.ts (ou .js si vous n'utilisez pas TypeScript)

import { Client, Account, Databases, Storage } from 'react-native-appwrite';

// Configuration
const APPWRITE_ENDPOINT = 'https://cloud.appwrite.io/v1';
const APPWRITE_PROJECT_ID = 'VOTRE_PROJECT_ID'; // Remplacez par votre Project ID

// Initialiser le client Appwrite
const client = new Client();

client
  .setEndpoint(APPWRITE_ENDPOINT)
  .setProject(APPWRITE_PROJECT_ID)
  .setPlatform('com.votreapp.expo'); // Votre package name Android ou bundle ID iOS

// Exporter les services
export const account = new Account(client);
export const databases = new Databases(client);
export const storage = new Storage(client);

export { client };

Points importants :

  • Remplacez VOTRE_PROJECT_ID par l'ID de votre projet Appwrite
  • Si vous auto-hébergez, changez APPWRITE_ENDPOINT vers votre URL
  • Le setPlatform() doit correspondre à ce que vous avez configuré dans la console Appwrite

5. Initialiser Appwrite dans votre app

Importez le polyfill au début de votre fichier principal (App.tsx ou app/_layout.tsx pour Expo Router) :

import 'react-native-url-polyfill/auto';
import { account } from './src/lib/appwrite';

6. Implémenter l'authentification

Voici un exemple complet d'écran de connexion/inscription :

src/screens/AuthScreen.tsx

import React, { useState } from 'react';
import { View, TextInput, Button, Text, StyleSheet, Alert } from 'react-native';
import { account } from '../lib/appwrite';
import { ID } from 'react-native-appwrite';

export default function AuthScreen() {
  const [email, setEmail] = useState('');
  const [password, setPassword] = useState('');
  const [name, setName] = useState('');

  // Inscription
  const handleSignUp = async () => {
    try {
      await account.create(
        ID.unique(), // Génère un ID unique
        email,
        password,
        name
      );
      Alert.alert('Succès', 'Compte créé avec succès !');
      // Connecter automatiquement après inscription
      await handleLogin();
    } catch (error: any) {
      Alert.alert('Erreur', error.message);
    }
  };

  // Connexion
  const handleLogin = async () => {
    try {
      await account.createEmailPasswordSession(email, password);
      Alert.alert('Succès', 'Connexion réussie !');
      // Naviguer vers votre écran principal
    } catch (error: any) {
      Alert.alert('Erreur', error.message);
    }
  };

  // Déconnexion
  const handleLogout = async () => {
    try {
      await account.deleteSession('current');
      Alert.alert('Succès', 'Déconnexion réussie');
    } catch (error: any) {
      Alert.alert('Erreur', error.message);
    }
  };

  // Récupérer l'utilisateur actuel
  const getCurrentUser = async () => {
    try {
      const user = await account.get();
      Alert.alert('Utilisateur', `Connecté en tant que: ${user.email}`);
    } catch (error: any) {
      Alert.alert('Info', 'Aucun utilisateur connecté');
    }
  };

  return (
    <View style={styles.container}>
      <Text style={styles.title}>Appwrite Auth</Text>

      <TextInput
        style={styles.input}
        placeholder="Nom"
        value={name}
        onChangeText={setName}
      />

      <TextInput
        style={styles.input}
        placeholder="Email"
        value={email}
        onChangeText={setEmail}
        autoCapitalize="none"
        keyboardType="email-address"
      />

      <TextInput
        style={styles.input}
        placeholder="Mot de passe"
        value={password}
        onChangeText={setPassword}
        secureTextEntry
      />

      <View style={styles.buttonContainer}>
        <Button title="Inscription" onPress={handleSignUp} />
        <Button title="Connexion" onPress={handleLogin} />
        <Button title="Déconnexion" onPress={handleLogout} color="red" />
        <Button title="Utilisateur actuel" onPress={getCurrentUser} color="gray" />
      </View>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    padding: 20,
  },
  title: {
    fontSize: 24,
    fontWeight: 'bold',
    marginBottom: 20,
    textAlign: 'center',
  },
  input: {
    borderWidth: 1,
    borderColor: '#ddd',
    padding: 10,
    marginBottom: 10,
    borderRadius: 5,
  },
  buttonContainer: {
    gap: 10,
    marginTop: 10,
  },
});

7. Tester votre configuration

Pour tester que tout fonctionne :

  1. Lancez votre application Expo :

    npx expo start
    
  2. Testez l'inscription :

    • Entrez un nom, email et mot de passe
    • Cliquez sur "Inscription"
    • Vérifiez dans la console Appwrite que l'utilisateur a été créé
  3. Testez la connexion :

    • Utilisez les mêmes identifiants
    • Cliquez sur "Connexion"
  4. Vérifiez l'utilisateur actuel :

    • Cliquez sur "Utilisateur actuel" pour voir les infos

Conseils supplémentaires :

  • Gestion d'état : Utilisez Context API ou Zustand pour gérer l'état d'authentification globalement
  • Base de données : Utilisez databases.createDocument() pour sauvegarder des données
  • Stockage : Utilisez storage.createFile() pour uploader des images
  • Sécurité : Configurez les permissions dans la console Appwrite pour protéger vos données

C'est tout ! Vous avez maintenant Appwrite configuré dans votre application Expo React Native avec un système d'authentification fonctionnel.

Articles recommandés