我已经创建了一个简单的注册/认证系统,我想从我的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'}
1条答案
按热度按时间lp0sw83n1#
我最终放弃了我所有的东西,倒着想办法解决,这是我得到的
ContinueSignUp.jsx
这实际上是将uid设置为DocID,使x1000倍更容易检索!
还使用了答案here来帮助显示来自firestore的用户数据。