gpt4 book ai didi

javascript - firebase 在一处返回未定义的用户 ID,在另一处返回正确的值

转载 作者:行者123 更新时间:2023-12-04 03:35:14 26 4
gpt4 key购买 nike

我有以下函数来获取用户标识:

currentUser.js

import firebase from './firebase';

export default function getCurrentUserID() {
var user = firebase.auth().currentUser;
var uid;
if (user != null) {
uid = user.uid; // The user's ID, unique to the Firebase project. Do NOT use
// this value to authenticate with your backend server, if
// you have one. Use User.getToken() instead.
return uid;
}
return uid;
}

使用按钮添加项目的以下代码工作正常:

addProject.js

import getCurrentUserID from './currentUserID';
import getFirestoreDB from './firestoreDB';
import Project from './project';
const addProjectBtn = document.getElementById('addProjectBtn');
function addProject() {
const title = prompt('Insert title');
const description = prompt('Insert Description');
const project = new Project(title, description);
const db = getFirestoreDB();
const currentUserUID = getCurrentUserID();
alert(currentUserUID);
db.doc(`users/${currentUserUID}/projects/${title}`).set({ ...project }).then(() => {
alert("Success");
}).catch((error) => {
alert("Error " + error);
});
}

export default function enableAddProjectBtnFunctionality() {
addProjectBtn.addEventListener('click', addProject);
}

但是,下面显示项目的代码不起作用。 alert(uid) 在这里显示未定义,但在上面显示正确的用户 ID。

displayProjects.js

import getCurrentUserID from "./currentUserID";
import getFirestoreDB from './firestoreDB';

var db = getFirestoreDB();

export default function displayProjects(){
var uid = getCurrentUserID();
if(uid){
alert(uid);
var projectsRef = db.collection("users").doc(`${uid}`).collection("projects");
projectsRef.get().then((querySnapshot) => {
querySnapshot.forEach((doc) => {
// doc.data() is never undefined for query doc snapshots
console.log(doc.id, " => ", doc.data());
});
});
}

}

谁能帮我弄清楚这里的问题是什么以及我该如何解决它?

最佳答案

displayProjects 方法很可能在用户登录完成之前执行。

在这种情况下获取用户状态的正确方法是使用身份验证状态监听器,如 getting the current user 文档中的第一个代码片段所示。 .

在你的代码中看起来像这样:

export default function displayProjects(){
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
var uid = user.uid;
var projectsRef = db.collection("users").doc(`${uid}`).collection("projects");
projectsRef.get().then((querySnapshot) => {
querySnapshot.forEach((doc) => {
console.log(doc.id, " => ", doc.data());
});
});
}
});
}

关于javascript - firebase 在一处返回未定义的用户 ID,在另一处返回正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67033153/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com