使用电子邮件和密码创建新用户时,验证状态会更改。
我实现了firebase.auth().onAuthStateChanged()
,可以观察我的应用程序中的登录状态。但是它具有用于创建复制问题的新用户的工具。用firebase.auth().createUserWithEmailAndPassword()
创建新用户后,可观察对象将返回新用户,这会导致我的应用注销。
这正常吗?如何在不更改身份验证状态的情况下通过我的应用创建新用户?
答案 0 :(得分:1)
在使用firebase.auth().createUserWithEmailAndPassword()
创建用户时,它将自动注销当前用户并登录到新创建的用户。为避免这种情况,您必须使用admin sdk创建新用户。
这是示例代码:
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);
}
});