web-dev-qa-db-ja.com

firebase admin SDKがユーザーを作成し、確認メールを送信します

Firebase admin SDKでユーザーを作成した後、確認メールを送信するにはどうすればよいですか?組み合わせようとしています createUser function および sendEmailVerification function 誰かがヒントや答えを示すことができますか?ありがとう

更新:

ユーザーの作成は、アプリに既にサインインしている管理者ユーザーによって行われているため、管理者ユーザーはダッシュボード上でユーザーを作成しているだけです。これは、登録方法とはまったく異なります。

アップデート2:

私は従おうとしました bojeilの答え 、私はまだユーザーがカスタムトークンでサインインするステップで立ち往生しています。現在の管理者ユーザーセッションと競合し、管理者ユーザーが追い出され、代わりに新しいユーザーがサインインします。新しいユーザーをサインアウトしても、管理者ユーザーはまだアウトであり、再度ログインするにはサインインする必要があります。アプリ。

カスタムトークンを取得した後のアプリ内のコードは次のとおりです。

$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;
                    // ...
                });

        });

そのため、トークンを取得し、新しいユーザーにサインインし、メール確認リンクを送信してから、新しいユーザーをサインアウトします。しかし、これらすべてを実行している私の管理者ユーザーもサインアウトされます。ここで何が欠けていますか?

12
passion

OKこれはあなたができることですが、クォータの制限に達する可能性があります。

  • Firebase-adminモジュールを含めます。
  • Firebaseクライアントモジュールを含めます。
  • admin sdkを使用して、createUserを介して新しいユーザーを作成します
  • その約束が解決したら、作成したユーザーのuidを取得します。
  • admin sdkを使用して、そのuidのカスタムトークンを作成します。
  • クライアントSDKを使用して、そのカスタムトークンを使用してsignInWithCustomトークン。
  • プロセスでユーザーが返されます。user.sendEmailVerification()を呼び出します。
  • クライアントSDKからそのユーザーをサインアウトします。
14
bojeil

かなりクリーンな解決策は、実際にREST APIを使用することです。

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

[API KEY]は、プロジェクト設定から取得できるWebクライアントAPIキーです>アプリを追加します>> Webをクリックすると、JSONを使用して構成を取得します。JSON内に必要なAPIKeyがあります使用する。

3
N Jay

このためにFirebaseAdminSDKを使用する必要はありません。通常のFirebaseクライアント側SDKを使用できます。

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

Firebaseによると、admin-sdkは現在この機能をサポートしていません。ここで彼らの応答を参照してください: https://stackoverflow.com/a/44557980/8177355

電子メール/パスワード認証ユーザーがログインし、認証を必要とする機能を使用しようとするたびに、onAuthStateChanged()を呼び出して、電子メールの検証のためにユーザーのレコードを確認します。

メールが確認されておらず、以前に確認メールを送信したことがない場合は、自動的に送信します。ユーザーにメールの確認を求めるエラーを返します。 (変数をfirestoreのユーザーのプロファイル設定に保存して、以前に送信されたかどうかを示します)。

今後アプリを使用しようとしても、メールがまだ確認されない場合は、同じエラーが返されます。また、エラーに「確認メールを再送信」というラベルの付いたボタンが含まれ、押されたときに確認メールの送信がトリガーされます。 (このようにして、ユーザーが何かをしようとするたびに、大量の確認メールを自動的に送信することはありません。)

1
Matthew Rideout