2
votes

Auth state changes when a new user is created with email and password. I implement firebase.auth().onAuthStateChanged() observable to watch login state in my app. But it have tool for creating new users that reproduces de issue. After creating new user withfirebase.auth().createUserWithEmailAndPassword() the observable returns the new user, wich causes my app log out.

Is this normal? How can I create new users from my app without changing auth state?

See the stackblitz example

1
Firebase Authentication doesn't have a way for users to create other arbitrary users from a client app. If you want to create other users, you will need to use the Firebase Admin SDK from a backend you control, and figure out how to invoke that. - Doug Stevenson

1 Answers

2
votes

while creating the user using firebase.auth().createUserWithEmailAndPassword() it will automatically logged out the current user and will logged into the newly created user.To avoid this you have to create the new user using admin sdk.

here is the sample code:

exports.createUser = functions.firestore
.document('user/{userId}')
.onCreate(async (snap, context) => {
    try {
        const userId = snap.id;
        const batch = admin.firestore().batch();
        const newUser = await admin.auth().createUser({
            disabled: false,
            displayName: snap.get('name'),
            email: snap.get('email'),
            password: snap.get('password')
        });

        const ref1 = await 
        admin.firestore().collection('user').doc(newUser.uid);
            await batch.set(ref1, {
            id: newUser.uid,
            email: newUser.email,
            name: newUser.displayName,
            createdAt: admin.firestore.FieldValue.serverTimestamp()
        });
        const ref3 = await admin.firestore().collection('user').doc(userId);
        await batch.delete(ref3);
        return await batch.commit();
    }
    catch (error) {
        console.error(error);
    }

});