Comment puis-je envoyer un e-mail de vérification après avoir créé un utilisateur avec le SDK d'administration de Firebase? J'essaie de combiner createUser function et sendEmailVerification function quelqu'un pourrait-il indiquer un indice ou une réponse? Merci

Mise à jour:

La création de l'utilisateur est effectuée par un utilisateur administrateur qui est déjà connecté à l'application, de sorte que l'utilisateur administrateur crée simplement des utilisateurs sur le dashboad. Ceci est complètement différent des méthodes d'enregistrement.

Mise à jour 2:

J'ai essayé de suivre la réponse de bojeil, je suis toujours coincé avec l'étape que l'utilisateur se connecte avec le jeton personnalisé. Cela entre en conflit avec ma session utilisateur administrateur actuelle, les utilisateurs administrateurs sont expulsés et à la place, le nouvel utilisateur est connecté et même lorsque je déconnecte le nouvel utilisateur, l'utilisateur administrateur est toujours absent et doit se connecter pour revenir à l'application.

Voici mon code dans l'application après avoir obtenu le jeton personnalisé:

$http.post('/.custom-token', {uid: $scope.data.data.uid})
        .then(function (response) {
            console.log("custom token here:", response.data.token);
            firebase.auth().signInWithCustomToken(response.data.token)
                .then(function (firebaseUser) {
                    firebaseUser.sendEmailVerification();
                    firebase.auth().signOut().then(function() {
                        // Sign-out successful.
                        console.log("signed out success");
                    }, function(error) {
                        // An error happened.
                    });
                })

                .catch(function(error) {
                    // Handle Errors here.
                    var errorCode = error.code;
                    var errorMessage = error.message;
                    // ...
                });

        });

Ainsi, j'obtiens le jeton, je connecte le nouvel utilisateur, j'envoie le lien de vérification par e-mail, puis je déconnecte le nouvel utilisateur. Mais mon utilisateur administrateur qui fait tout cela est également déconnecté. Qu'est-ce que j'oublie ici?

17
passion 26 janv. 2017 à 23:42

4 réponses

Meilleure réponse

OK, c'est ce que vous pouvez faire, mais vous pouvez atteindre les limites de quota:

  • Incluez le module firebase-admin.
  • Incluez le module client Firebase.
  • en utilisant admin sdk, créez le nouvel utilisateur via createUser
  • lorsque cette promesse se résout, obtenez l'uid de l'utilisateur créé.
  • en utilisant admin sdk, créez un jeton personnalisé pour cet uid.
  • à l'aide du sdk client, du jeton signInWithCustom à l'aide de ce jeton personnalisé.
  • Un utilisateur est renvoyé dans le processus, appelez user.sendEmailVerification ()
  • signOut cet utilisateur du SDK client.
14
bojeil 27 janv. 2017 à 01:58

Une solution plutôt propre consisterait à utiliser réellement les API REST.

curl 'https://www.googleapis.com/identitytoolkit/v3/relyingparty/getOobConfirmationCode?key=[API_KEY]' \
-H 'Content-Type: application/json' \
--data-binary '{"requestType":"PASSWORD_RESET","email":"[user@example.com]"}'

La [API KEY] est une clé API du client Web qui peut être récupérée à partir des paramètres du projet> ajouter une application >> cliquez sur le Web et vous obtiendrez la configuration avec un JSON, dans le JSON, il y a une clé API qui est celle dont vous avez besoin utiliser.

3
N Jay 4 oct. 2018 à 04:55

Selon Firebase, admin-sdk ne prend actuellement pas en charge cette fonctionnalité. Voir leur réponse ici: https://stackoverflow.com/a/44557980/8177355

Chaque fois qu'un utilisateur d'authentification par e-mail / mot de passe est connecté et tente d'utiliser une fonctionnalité qui nécessite une authentification, j'appelle onAuthStateChanged (), puis je vérifie l'enregistrement de l'utilisateur pour la vérification de l'e-mail.

Si l'e-mail n'est pas vérifié et que je n'ai pas encore envoyé d'e-mail de vérification, je l'envoie automatiquement. Je renvoie une erreur, demandant à l'utilisateur de vérifier son email. (Je stocke une variable dans une configuration de profil pour l'utilisateur dans Firestore, pour indiquer si elle a été envoyée précédemment).

Lors des futures tentatives d'utilisation de l'application, si l'e-mail n'est toujours pas vérifié, je renvoie la même erreur, et j'inclus également un bouton dans l'erreur intitulé "Renvoyer l'e-mail de vérification" qui déclenche l'envoi de l'e-mail de vérification lorsque vous appuyez sur. (De cette façon, je n'envoie pas automatiquement des tonnes de courriels de vérification chaque fois que l'utilisateur essaie de faire quelque chose.)

2
Matthew Rideout 27 févr. 2018 à 17:04

Vous n'avez même pas besoin d'utiliser le SDK Firebase Admin pour cela. Vous pouvez simplement utiliser le SDK Firebase côté client standard:

firebase.auth().createUserWithEmailAndPassword(email, password)
  .then(function(user) {
     console.log("User successfully created:", user.uid);
     return user.sendEmailVerification();
  })
  .then(function() {
    console.log("Email verification email successfully sent!");
  })
  .catch(function(error) {
    console.log("Error:", error);
  });
2
jwngr 26 janv. 2017 à 23:14