我目前正在開發我的第一個使用Firebase作爲我的數據庫的ReactJS的「大」web應用程序。一切都很順利,直到我遇到這個問題。Firebase的set()不在裏面onAuthStateChanged()
我想保存登錄時,與Facebook或Twitter應用程序的用戶信息,我使用的火力地堡這樣提供的方法:
authenticate(option){
let provider;
switch (option) {
case 'facebook':
provider = new firebase.auth.FacebookAuthProvider();
break;
case 'twitter':
provider = new firebase.auth.TwitterAuthProvider();
break;
default:
provider = 'no-provider'
break;
}
if(provider !== 'no-provider'){
firebase.auth().signInWithPopup(provider).then((result) => {
console.log("Login with " + provider + " ok!");
console.log(result);
}).catch((error) => {
console.log("Error: there was an error trying to login.");
});
}
}
但是,當我嘗試保存用戶登錄後進入數據庫,沒有任何反應。
這是我對App.js
componentDidMount() {
base.auth().onAuthStateChanged((loggedUser) => {
if (loggedUser) {
this.setState({
userName: loggedUser.displayName,
userPhoto: loggedUser.photoURL,
userUID: loggedUser.uid
});
base.database().ref('users/' + loggedUser.uid).on('value',
(user) => {
if (user.val() !== null) {
if (user.val().votedAlbums !== undefined) {
this.setState({
votedAlbums: user.val().votedAlbums
});
}
} else {
console.log(loggedUser.uid);
let userInfo = {
lastActivityTime: new Date()
}
base.database().ref('users/' + loggedUser.uid).set(userInfo).then((ref) =>{
console.log(ref); // this logs 'undefined'
}).catch((error) => {
console.log(error);
});
}
},
(err) => {
this.props.history.push('/error');
}
);
}
});
}
我試圖節省了用戶的其他功能和它的作品,無論是update()
和set()
。但是當我在onAuthStateChanged()
裏面呼叫set()
它不。
我的DB規則是:
{
"rules": {
".read": true,
".write": "auth != null"
}
}
我缺少的東西?
感謝
您可以使用'console.log(loggedUser.uid)' – bennygenel
@bennygenel確認'loggedUser.uid'在設置方法之前是否爲空。是的,不是空的。我只測試過一個用戶。我做了一個'console.log(loggedUser);'和uid在那裏。 –
你在哪裏登錄?在'on('value',....)'的回調中? – bennygenel