reactjs 如何使用react从firestore获取currentUser数据

svdrlsy4  于 2023-03-12  发布在  React
关注(0)|答案(1)|浏览(115)

我已经创建了一个简单的注册/认证系统,我想从我的firestore集合中检索登录用户的详细信息(姓名、简历、电子邮件、imgURL),但是除了上面列出的值的“未定义”和“空”之外,我没有运气。
实际的集合在注册时会填充电子邮件、uid、姓名、个人简介、imgURL,我尝试了各种方法来获取数据和显示,但我觉得我已经进入了一个死胡同。我是新使用firebase的,对react有点生疏,所以任何和所有的帮助都是感激的!
jsx -〉设置用户在firestore中提供的输入

const ContinueSignUp = () => {
  const [file, setFile] = useState();
  const [url, setURL] = useState();
  const [name, setName] = useState('');
  const [bio, setBio] = useState('');

  let user = firebase.auth().currentUser;
  let uid = user.uid;
  let email = user.email;
  
  const hidePlaceholder = url ? { display: "none" } : {};
  const navigate = useNavigate();

  function handleChange(e) {
    if (e.target.files && e.target.files[0]) setFile(e.target.files[0]);
    setURL(URL.createObjectURL(e.target.files[0]));
  }

  async function handleUpload(e) {
    e.preventDefault();
    const path = `/images/${file.name}`;
    const ref = storage.ref(path);
    await ref.put(file);
    const url = await ref.getDownloadURL();
    setURL(url);
    setFile(null);
    console.log(file);

    if (name === "") {
      return;
    }
    const userRef = collection(db, "users");
    addDoc(userRef, { name, bio, url, uid, email })
      .then((response) => {
        console.log(response);
        navigate("/portfolio")
      })
      .catch((error) => console.log(error.message));
  }

jsx -〉获取并显示输入

const Portfolio = () => {
  const uid = firebase.auth().currentUser.uid;
  const currentUserProfile = firebase.firestore().collection("users").doc(uid);
  
  useEffect(() => {
    currentUserProfile.get().then((doc) => {
     const userName = doc.data().bio;
      console.log(uid);
    }).catch((err) => {console.log("Error in displaying Name!")})
  }, []);
  • 实际文档ID已替换为零

我也试过onAuthStateChanged(()) => {},但也没用

  • 如果你发现任何其他的错误或优化的机会,请让我知道,我不采取进攻LOL

再次感谢你所能给予的任何帮助~~
这是我尝试过的方法之一,它获取所有用户的整个数据集合,但是,我只想获取当前登录的用户的数据。

const [profile, setProfile] = useState(null);

  useEffect(() => {
    getUserData();
  }, []);

  useEffect(() => {
    console.log(profile);
  }, [profile]);

  function getUserData() {
    const userRef = collection(db, "users");
    getDocs(userRef)
      .then((response) => {
        const user = response.docs.map((doc) => ({
          data: doc.data(),
          id: doc.id,
        }));
        console.log(response);
        setProfile(user);
      })
      .catch((error) => console.log(error.message));
  }

console.log(配置文件):

[{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {data: {…}, id: '00000000000000000000'}
1: {data: {…}, id: '00000000000000000000'}
2: {data: {…}, id: '00000000000000000000'}
3: {data: {…}, id: '00000000000000000000'}
4: {data: {…}, id: '00000000000000000000'}
5: {data: {…}, id: '00000000000000000000'}
6: {data: {…}, id: '00000000000000000000'}
7: {data: {…}, id: '00000000000000000000'}
8: {data: {…}, id: '00000000000000000000'}
lp0sw83n

lp0sw83n1#

我最终放弃了我所有的东西,倒着想办法解决,这是我得到的
ContinueSignUp.jsx

// Add a new document in collection "users"
        await setDoc(doc(db, "users", auth.currentUser.uid ), {
          name: name,
          bio: bio
        });

这实际上是将uid设置为DocID,使x1000倍更容易检索!
还使用了答案here来帮助显示来自firestore的用户数据。

相关问题