IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

TypeScript Discussion :

Erreur "hook call" dans le développement d'une application en TypeScript


Sujet :

TypeScript

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2024
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Août 2024
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Erreur "hook call" dans le développement d'une application en TypeScript
    Bonjour, Je développe une application apple depuis un an maintenant, j’aimerais ajouter l’option de déconnexion pour mes utilisateurs qui ont créé un compte, mais je rencontre de nombreuses erreurs. Quelqu’un saurait-il comment y remédier? Je vous en remercie par avance. Terminal:
    Error: Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:

    You might have mismatching versions of React and the renderer (such as React DOM)
    You might be breaking the Rules of Hooks
    You might have more than one copy of React in the same app See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem., js engine: hermes
    Le fichier que j’ai modifié avant d’avoir cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    import React, { useEffect, useState } from 'react’;
    import { Button, View, Alert } from 'react-native;
    import as WebBrowser from 'expo-web-browser’;
    import as Google from 'expo-auth-session/providers/google’;
    import * as AppleAuthentication from 'expo-apple-authentication’;
    import { GoogleAuthProvider, OAuthProvider, signInWithCredential, signInAnonymously, reauthenticateWithCredential, deleteUser } from 'firebase/auth’;
    import { auth } from './Firebase’;
    import clientId from '../.env/GoogleAuth’;
    import { digestStringAsync, CryptoDigestAlgorithm } from 'expo-crypto’;
     
    WebBrowser.maybeCompleteAuthSession();
     
    const Applenonce = Math.random().toString(36).substring(2, 10);
     
    export const appleConnection = (setDisabled: (disable: boolean) => void) => { const [appleCredential, setAppleCredential] = useState(null);
     
    useEffect(() => {
        if (appleCredential) {
            const { identityToken, email, fullName } = appleCredential;
     
            const provider = new OAuthProvider('apple.com');
            const credential = provider.credential({
                idToken: identityToken!,
                rawNonce: Applenonce
            });
     
            signInWithCredential(auth, credential);
            setDisabled(true);
        } else {
            setDisabled(false);
        }
    }, [appleCredential]);
     
    const signInWithAppleAsync = async () => {
        try {
            const nonce = await digestStringAsync(
                CryptoDigestAlgorithm.SHA256,
                Applenonce
            );
            const appleCredential = await AppleAuthentication.signInAsync({
                requestedScopes: [
                    AppleAuthentication.AppleAuthenticationScope.FULL_NAME,
                    AppleAuthentication.AppleAuthenticationScope.EMAIL,
                ],
                nonce,
            });
     
            setAppleCredential(appleCredential);
        } catch (e) {
            if (e.code === 'ERR_REQUEST_CANCELED') {
                setAppleCredential(null);
            } else {
                setAppleCredential(null);
            }
        }
    };
     
    return (signInWithAppleAsync);
    }
     
    export const googleConnection = (setDisabled: (disable: boolean) => void) => { const [request, response, promptAsync] = Google.useIdTokenAuthRequest({ …clientId }, { projectNameForProxy: "@popoters/slug" });
     
    useEffect(() => {
        if (response?.type === 'success') {
            const { id_token } = response.params;
            const credential = GoogleAuthProvider.credential(id_token);
            signInWithCredential(auth, credential);
        }
        setDisabled(!request || response?.type === 'success');
    }, [response, request]);
     
    const signInWithGoogleAsync = async () => {
        try {
            const result = await promptAsync();
            if (result.type === 'success') {
                return result.params.id_token;
            } else {
                return { cancelled: true };
            }
        } catch (e) {
            return { error: true };
        }
    };
     
    return (signInWithGoogleAsync);
    }
     
    export const loginAnymously = (setDisabled: (disabled: boolean) => void) => { setDisabled(true); signInAnonymously(auth) .then(() => { }) .catch((error) => { alert(error.message); setDisabled(false); }); }
     
    export const DeleteAppleAccountButton = (setDisabled) => { const [loading, setLoading] = useState(false);
     
    const handleDeleteAccount = async () => {
        setLoading(true);
        try {
            const nonce = await digestStringAsync(
                CryptoDigestAlgorithm.SHA256,
                Applenonce
            );
            const appleCredential = await AppleAuthentication.signInAsync({
                requestedScopes: [
                    AppleAuthentication.AppleAuthenticationScope.FULL_NAME,
                    AppleAuthentication.AppleAuthenticationScope.EMAIL,
                ],
                nonce,
            });
     
            const { identityToken } = appleCredential;
            const provider = new OAuthProvider('apple.com');
            const credential = provider.credential({
                idToken: identityToken!,
                rawNonce: Applenonce,
            });
     
            const user = auth.currentUser;
            if (user) {
                await reauthenticateWithCredential(user, credential);
                await deleteUser(user);
                Alert.alert("Compte supprimé avec succès.");
            }
        } catch (e) {
            Alert.alert("Erreur lors de la suppression du compte", e.message);
        } finally {
            setLoading(false);
            setDisabled(false);
        }
    };
    }

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 412
    Points : 15 781
    Points
    15 781
    Par défaut
    je trouve bizarre la ligne "WebBrowser.maybeCompleteAuthSession" en dehors d'un composant.
    commentez là pour voir si vous avez toujours le même message d'erreur.

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2024
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Août 2024
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci pour ta réponse. Je viens d'essayer, l'erreur est toujours la même.

Discussions similaires

  1. Erreur à cause de string dans l'appelle d'une fonction
    Par Bootax dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 25/03/2009, 20h02
  2. Réponses: 0
    Dernier message: 21/01/2008, 19h28
  3. Réponses: 4
    Dernier message: 09/07/2007, 15h07
  4. quote dans des valeurs d'une colonne SET
    Par Jean Fi dans le forum Requêtes
    Réponses: 6
    Dernier message: 30/03/2006, 20h16
  5. Gestion d’Un Msgbox dans la Fermeture d’une application
    Par hoummass dans le forum Windows Forms
    Réponses: 5
    Dernier message: 25/11/2005, 16h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo