web-dev-qa-db-ja.com

Firebase 3でユーザーを作成し、認証しない方法はありますか?

私はangularfireプロジェクトに取り組んでいますが、Firebase 3でユーザーを作成する方法を知りたいのですが、完了したら、指定したユーザーを認証しないでください。以前のFirebaseバージョンでは、createUser(email、password)というメソッドがありました。これで、createUserWithEmailAndPassword(email、password)メソッドのみが作成され、指定されたユーザーが作成および認証されます。

11
gcfabri

質問への答えは次のとおりです:あなたはできません。

他のユーザーを作成できる「admin」ユーザーがいる場合も同様の状況です。 2.xではこれは簡単でした。 3.xでは、その機能が完全に削除されたため、失敗します。

3.xでユーザーを作成する場合は、そのユーザーとして認証し、ログインしているアカウントの認証を解除します。

別のユーザーを作成するには再認証が必要になるため、これはさらに深くなります。したがって、管理者はそれを手動で行うか、(cringe)認証データをローカルに保存して、自動化されたプロセスにすることができます(cringe cringe、これは行わないでください)

Firebaseは、2.xは引き続きサポートされることを公に強調しているため、3.xは避けたいと思うかもしれません。

更新

firebaserの1つは、実際にこれに関する回避策を考え出しました。概念的には、管理者ユーザーがログインしていました。次に、firebaseへの2番目の接続を作成し、別のユーザーで認証すると、その接続によって新しいユーザーが作成されます。すすぎ-繰り返します。

再度更新

この質問と回答を参照してください

Firebaseが現在のユーザーを追い出します

10
Jay

これは、クラウド機能とFirebase AdminSDKを使用して実行できます。以下のようなHTTP関数を作成します。

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp(functions.config().firebase);

// // Create and Deploy Your First Cloud Functions
// // https://firebase.google.com/docs/functions/write-firebase-functions
//
exports.createUser = functions.https.onRequest((request, response) => {
    if (request.method !== "POST") {
        response.status(405).send("Method Not Allowed");
    } else {
        let body = request.body;

        const email = body.email;
        const password = body.password;
        const displayName = body.displayName;

        admin.auth().createUser({
            email: email,
            emailVerified: false,
            password: password,
            displayName: displayName,
            disabled: false
        })
        .then((userRecord) => {
            return response.status(200).send("Successfully created new user: " +userRecord.uid);
        })
        .catch((error) => {
            return response.status(400).send("Failed to create user: " + error);
        });
    }
});

クライアントアプリで、たとえばajaxを使用して、Httpリクエストを使用してこの関数を呼び出します

$.ajax({
       url: "the url generated by cloud function",
       type: "POST",
       data: {
           email: email,
           password: password,
           displayName: name
       },
       success: function(response) {
            console.log(response);
       },
       error: function(xhr, status, error) {
             let err = JSON.parse(xhr.responseText);
                 console.log(err.Message);
             }
       });
1
elbert rivas