gpt4 book ai didi

javascript - Firebase 谷歌身份验证问题

转载 作者:行者123 更新时间:2023-12-03 03:08:25 25 4
gpt4 key购买 nike

我正在尝试在我的网络应用程序中创建使用Google和Facebook的登录,其想法是使用Google或Facebook登录用户,检查用户的uid是否在实时数据库中并重定向用户。

checkRegisterUser: function(user){

var register_user,
register = false;

app.references.user_ref.on('value', function(snapshot) {
register_user = snapshot.val();
console.log(register_user);
});
$.each(register_user, function(index, val){

if(user.uid === index){
register = true;
return;
}
})
console.log(register);
if(!register){
firebase.auth().signOut();
$('#login').modal('hide');
$('#modal_register').modal('show');
return false;
}
$(window).attr('location', app.urlGallery());
}


google_login: function(){

var provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider).then(function(result) {
// This gives you a Google Access Token. You can use it to access the Google API.
var token = result.credential.accessToken;
// The signed-in user info.
var user = result.user;
app.checkRegisterUser(user);
// firebase.auth().signInWithRedirect(provider);
}).catch(function(error) {
console.log(error);
});

},

使用 google 或 facebook 登录后,我向用户对象发送函数 checkRegisterUser() 循环用户数组以查看 uid 是否已在实时数据库中,如果用户 uid 已在实时数据库将register变量更改为true并重定向,我的问题是,如果用户存在,第一次总是给我假,只有当我第二次尝试时才给我真.

最佳答案

由于 Firebase 的异步特性,我在 iOS 上遇到了类似的问题。虽然不是 100% 同意,但请尝试一下:

逻辑 - 此函数

app.references.user_ref.on('value', function(snapshot) {
register_user = snapshot.val();
console.log(register_user);
});

是异步的,所以我们并不知道它什么时候会返回一个值。因此,在返回此调用之前,循环无法执行。但是,您检查 if(!register) 这可能会在查询返回结果之前发生。因此,由于寄存器的值尚未更新,因此该 block 将执行。

其次,循环遍历所有用户以检查他们是否在数据库中的效率不高,而且扩展性肯定很差。我建议您将存储用户的方式更改为类似这样,以便您可以立即检查它们是否存在于数据库中。

users: {
uid: {
name: "Bart Simpson"
email: "Bart@simpsons.com"
}
uid2: {
....
....
}
}

此结构将允许您使用 if snapshot.exists()。这将立即告诉您用户是否在数据库中,并允许您相应地执行所需的操作。

使用上述结构,您的查询将如下所示。

var userUID = uid; 
var ref = new Firebase('https://SampleChat.firebaseIO-demo.com/users/' + userUID);
ref.on('value', function(snapshot) {
if (snapshot.exists())
alert ("exist");
else
alert ("not exist");
});

您可以阅读有关检查 Firebase 中是否存在值的更多信息 here

关于javascript - Firebase 谷歌身份验证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47059372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com