如何从https可调用函数创建新帐户,并在成功调用函数后将浏览器的身份验证状态更改为已登录



我用角度做前端,用火力做后端。我在 angular 中创建了一个表单,以包含一些字段,例如名字、姓氏、电子邮件、密码、手机号码、地址等。

当我提交表单时,我想做两件事 -
1。使用电子邮件和密码创建用户帐户.
2。在Firestore的用户集合中添加一个文档,其中包含名字,姓氏,手机号码,地址等字段
我不想在客户端做这两件事。

所以,我在 firebase 中创建了一个云函数来做上述两件事——

export const register = functions.https.onCall((data, context) => {
const firestore = admin.firestore();
const auth = admin.auth();
return auth.createUser({
email: data.email,
password: data.password
}).then(user => {
let dbData = {};
// Assign all fields to dbData except 'email' and 'password' because I don't want to store those fields in the database
Object.keys(data).forEach(el => { if (el != 'email' && el != 'password') dbData[el] = data[el];});
return firestore.collection('users').doc(user.uid)
.set(dbData)
.then(() => {
return 'success';
}, error => {
throw new functions.https.HttpsError('unknown', 'Unknown error.');
});
}, error => {
throw new functions.https.HttpsError('unknown', 'Unknown error.');
});
});

我像这样用 angularfire2 调用 angularfire2 中的云函数——

const registerFunction = this.afFunctions.functions.httpsCallable('register');
registerFunction(data)
.then(() => {
// Account created successfully
}),
error => {
// Error occured
});

帐户创建成功。但问题是浏览器(客户端应用程序(没有登录到刚刚创建的帐户。我希望用户在注册时登录。

所以我的问题是如何通过调用https可调用函数让用户在客户端上登录?

你确实想做这个客户端。您创建一个表单,获取用户的电子邮件地址和密码,然后拨打.createUserWithEmailAndPassword。浏览器将运行Firebase SDK,该SDK具有.onAuthStateChanged侦听器,该侦听器将从null切换到currentUser对象。

建议先使用验证用户拥有电子邮件,但首先触发验证链接。

最新更新