我正在尝试使用用户名和密码将用户登录到我的应用程序。我读到了Create Custom Tokens
和Authenticate with Firebase in JavaScript Using a Custom Authentication System
,但是仍然对如何实现它感到困惑,因此我尝试了另一种方法。当用户插入其用户名时,如果存在这样的用户名,则应用将在Firestore集合中进行搜索,如果存在,请为该用户使用email
字段并传递给方法signInWithEmailAndPassword(email, password);
,我将收到上述错误因为我不尊重Cloud Firestore Data model
结构应为collection - document - collection - document
的地方。
在这种情况下我应该如何进行?
我的Firestore模式如下所示
users
- username1
- userId
- email
- username2
- userId
- email
JavaScript代码
app.post("/login", (req, res) => {
const user = {
username: req.body.username,
password: req.body.password
};
...
let email;
db.doc(`/users/${user.username}`).get()
.then((doc) => {
if (doc.exists) {
email = db.doc(`/users/${user.username}/email`).get();
firebase.auth().signInWithEmailAndPassword(email, user.password)
.then((data) => {
return data.user.getIdToken();
})
.then((token) => {
return res.json({token});
})
...
答案 0 :(得分:2)
错误“文档引用必须具有偶数个段”与Firebase身份验证无关。告诉您构建文档引用的代码不正确:
db.doc(`/users/${user.username}/email`)
在这里,您的文档参考有三段(奇数)。文档引用必须具有偶数。
由于您已经阅读了用户文档,因此无需阅读其他内容。如果您希望从已经拥有的DocumentSnapshot中删除电子邮件地址,请直接获取它:
if (doc.exists) {
email = doc.data().email;
我建议查看documentation,了解如何从Firestore中读取文档。