我正在使用react-native-google-signin来实现谷歌登录功能。设置完所有配置步骤后,我就可以从GoogleSignin.signIn()获得“用户”。然后((用户)=> {...}。
现在,我想检查此用户是否已使用“此”Google帐户。因为如果是,我不需要在firebase数据库中创建用户数据。但如果不是(第一次),我需要在Google登录功能中创建用户数据。这是我的代码。
import fire from '../../firebase'
.. ..
GoogleSignin.signIn()
.then((user) => {
console.log('get user'); // I can get user here
// This firebase function can't be called (no reaction)
fire.database().ref('Users').child(user.id).once('value', snapshot => {
console.log('inside function'); // can't log it
if(!snapshot.val()) {
console.log('new'); // can't log it
fire.database().ref('Users').child(user.id).child('User_Data').set({
username: user.name,
email: user.email,
avatar: user.photo
});
}
else {
console.log('old'); // can't log it
fire.database().ref('Users').child(user.id).child('User_Data').update({
username: user.name,
email: user.email,
avatar: user.photo
});
}
});
})
.catch((err) => {
console.log('WRONG SIGNIN', err);
})
.done();
我只能获取'用户'数据。我的Firebase身份验证屏幕中未创建新的Google电子邮件。此外,我的数据库中没有创建新的用户数据。
有没有人有相同的问题或解决方案?感谢您的帮助或想法!
答案 0 :(得分:0)
我没有使用React,所以这可能没什么帮助,但你是否尝试将代码重新分解为这样的代码;
function googleSignIn() {
GoogleSignin.signIn()
.then(validateSignIn) // Might need to be `this.validateSignIn`
.catch((err) => {
console.log('WRONG SIGNIN', err);
})
.done();
}
function validateSignIn(user) {
console.log('get user'); // I can get user here
// This firebase function can't be called (no reaction)
fire.database().ref('Users').child(user.id).once('value', snapshot => {
console.log('inside function'); // can't log it
if(!snapshot.val()) {
console.log('new'); // can't log it
fire.database().ref('Users').child(user.id).child('User_Data').set({
username: user.name,
email: user.email,
avatar: user.photo
});
}
else {
console.log('old'); // can't log it
fire.database().ref('Users').child(user.id).child('User_Data').update({
username: user.name,
email: user.email,
avatar: user.photo
});
}
}
这样validateSignIn
函数就在它自己的函数中,而不是由你的对象封装。