因此,我想根据我的react native应用程序中的登录用户访问配置文件名称。这里的问题是,即使我可以访问suer文档,我也无法访问其中的数据。
import React, { useState, useEffect } from 'react';
import { View, Text, StyleSheet } from 'react-native';
import { app, auth } from '../firebaseconfig';
import { getFirestore, doc, getDoc } from 'firebase/firestore';
const db = getFirestore(app);
const MainPage = () => {
const [userName, setUserName] = useState('');
useEffect(() => {
const fetchUserData = async () => {
try {
const user = auth.currentUser;
console.log('current user UID is:', user.uid);
if (user) {
const userDocRef = doc(db, 'users', user.uid);
console.log('The doc is:', userDocRef);
const userDocSnapshot = await getDoc(userDocRef);
console.log('User document:', userDocSnapshot);
if (userDocSnapshot) {
console.log('User document exists:', userDocSnapshot.data());
// Check if userData and userData.name exist before setting the state
const userData = userDocSnapshot.data();
if (userData && 'name' in userData) {
setUserName(userData.name);
console.log('Name property found:', userData.name);
} else {
console.log('Name property not found in user data');
}
} else {
console.log('User document does not exist in Firestore');
}
}
} catch (error) {
console.error('Error fetching user data:', error);
}
};
fetchUserData();
}, []);
return (
<View style={styles.container}>
<Text style={styles.text}>Hello, {userName}</Text>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
},
text: {
fontSize: 20,
fontWeight: 'bold',
},
});
export default MainPage;
日志
LOG current user UID is: 4sXptgVpAgUSh8jILHuv45R8fiz1
LOG The doc is: {"_key": {"path": {"len": 2, "offset": 0, "segments": [Array]}}, "converter": null, "firestore": {"app": [FirebaseAppImpl], "databaseId": [DatabaseId], "settings": [FirestoreSettingsImpl]}, "type": "document"}
LOG User document: {"_converter": null, "_document": null, "_firestore": {"app": [FirebaseAppImpl], "databaseId": [DatabaseId], "settings": [FirestoreSettingsImpl]}, "_firestoreImpl": {"app": [FirebaseAppImpl], "databaseId": [DatabaseId], "settings": [FirestoreSettingsImpl]}, "_key": {"path": {"len": 2, "offset": 0, "segments": [Array]}}, "_userDataWriter": {"firestore": [Object]}, "metadata": {"fromCache": false, "hasPendingWrites": false}}
LOG User Data: undefined
LOG Name property not found in user data
1.重新配置Firestore规则,以确保它们允许基于用户的UID进行读取访问。
1.控制台已记录代码以检查为什么我无法访问数据。
1条答案
按热度按时间wi3ka0sx1#
调用
getDoc
always会导致DocumentSnapshot
,所以这个检查永远不会失败:如果要检查快照是否属于现有文档,请调用其
exists
方法:这将修复该行为,并可能显示用户不存在文档。要进一步解决这个问题,请仔细比较您试图加载的文档的路径与数据库中的实际路径。