我想知道如何在每个用户创建帐户时使用Firebase Web制作文档。我启用了Firebase身份验证并且正常工作,我希望每个用户在Cloud Firestore中将文档放在名为users的集合中。如何获取UID然后自动为每个用户创建文档? (我这样做是为了让日历事件可以保存到文档中的数组字段中,但我需要一个文档供用户使用)。我知道并知道如何制定访问的安全规则,我只是不知道如何制作文档。 谢谢!
答案 0 :(得分:3)
虽然可以通过云功能创建用户配置文件,但正如Renaud和guillefd建议的那样,也可以考虑直接从应用程序代码创建文档。该方法非常相似,例如如果您使用电子邮件+密码登录:
firebase.auth().createUserWithEmailAndPassword(email, password)
.then(function(user) {
// get user data from the auth trigger
const userUid = user.uid; // The UID of the user.
const email = user.email; // The email of the user.
const displayName = user.displayName; // The display name of the user.
// set account doc
const account = {
useruid: userUid,
calendarEvents: []
}
firebase.firestore().collection('accounts').doc(userUid).set(account);
})
.catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// ...
});
除了直接从Web应用程序运行外,此代码还创建了以用户的UID作为键的文档,这使后续查找更简单。
答案 1 :(得分:0)
您必须设置由onCreate() Auth trigger触发的firebase功能
1.创建功能触发器
2.获取用户创建的数据
3.设置帐户数据
4.将帐户数据添加到集合中。
<强>功能/ index.js 强>
// Firebase function
exports.createAccountDocument = functions.auth.user().onCreate((user) => {
// get user data from the auth trigger
const userUid = user.uid; // The UID of the user.
//const email = user.email; // The email of the user.
//const displayName = user.displayName; // The display name of the user.
// set account doc
const account = {
useruid: userUid,
calendarEvents: []
}
// write new doc to collection
return admin.firestore().collection('accounts').add(account);
});
答案 2 :(得分:0)
如果您使用 Firebase UI 来简化您的生活,您可以仅将用户文档添加到 Firestore 中的“/users”集合中第一次< /em> 在您的 UI 配置中使用 authResult.additionalUserInfo.isNewUser
中的 signInSuccessWithAuthResult
进行注册。
我正在我的项目中做这样的事情:
let uiConfig = {
...
callbacks: {
signInSuccessWithAuthResult: (authResult) => {
// this is a new user, add them to the firestore users collection!
if (authResult.additionalUserInfo.isNewUser) {
db.collection("users")
.doc(authResult.user.uid)
.set({
displayName: authResult.user.displayName,
photoURL: authResult.user.photoURL,
createdAt: firebase.firestore.FieldValue.serverTimestamp(),
})
.then(() => {
console.log("User document successfully written!");
})
.catch((error) => {
console.error("Error writing user document: ", error);
});
}
return false;
},
},
...
}
...
ui.start("#firebaseui-auth-container", uiConfig);
signInSuccessWithAuthResult
为您提供一个 authResult
和一个 redirectUrl
。
来自Firebase UI Web Github README:
// ...
signInSuccessWithAuthResult: function(authResult, redirectUrl) {
// If a user signed in with email link, ?showPromo=1234 can be obtained from
// window.location.href.
// ...
return false;
}