Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何停止firebase数据库中的重复_Javascript_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript 如何停止firebase数据库中的重复

Javascript 如何停止firebase数据库中的重复,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我想在我的聊天应用中进行身份验证,所以当用户登录一次时,数据将插入到firbase数据库中,但当用户刚刚刷新他的chrome时,相同的数据将再次添加,所以如果用户已经插入,我想停止重复,所以我尝试了下面提到的代码,但这不起作用 function onStateChanged(user) { if (user) { //alert(firebase.auth().currentUser.email + '\n' + firebase.auth().currentUser.d

我想在我的聊天应用中进行身份验证,所以当用户登录一次时,数据将插入到firbase数据库中,但当用户刚刚刷新他的chrome时,相同的数据将再次添加,所以如果用户已经插入,我想停止重复,所以我尝试了下面提到的代码,但这不起作用

function onStateChanged(user) {
    if (user) {
        //alert(firebase.auth().currentUser.email + '\n' + firebase.auth().currentUser.displayName);

        var userProfile = { email: '', name: '', photoURL: '' };
        userProfile.email = firebase.auth().currentUser.email;
        userProfile.name = firebase.auth().currentUser.displayName;
        userProfile.photoURL = firebase.auth().currentUser.photoURL;

        var db = firebase.database().ref('users');
        var flag = false;
        db.on('value', function (users) {
            users.forEach(function (data) {
                var user = data.val();
                if (user.email === userProfile.email) {
                    flag = true;
                }
            });

            if (flag === false) {
                firebase.database().ref('users').push(userProfile, callback);
            }
            else {
                document.getElementById('imgProfile').src = firebase.auth().currentUser.photoURL;
                console.log('elsepart')
                document.getElementById('imgProfile').title = firebase.auth().currentUser.displayName;

                document.getElementById('lnkSignIn').style = 'display:none';
                document.getElementById('lnkSignOut').style = '';
            }
        });
        
    }
    else{
        document.getElementById('imgProfile').src = image/profile-image.png;
        document.getElementById('imgProfile').title = '';

        document.getElementById('linkSignIn').style = '';
        document.getElementById('linkSignOut').style = 'display: none';
    }
}

let callback = (error)=>{
    if(error){
        alert(error)
    }
    else{
        document.getElementById('imgProfile').src = firebase.auth().currentUser.photoURL;
        document.getElementById('imgProfile').title = firebase.auth().currentUser.displayName;

        document.getElementById('linkSignIn').style = 'display: none';
        document.getElementById('linkSignOut').style = '';
    }
}

///////////

onFirebaseStateChanged();

您可以尝试使用firebase读写函数来执行此操作,以供参考:

我也做过类似的事情。在这里,我检查了我的数据库中是否有相同的条目,如果不存在,那么它将允许您注册

firebase.database().ref('/login/' + username).once('value').then(function (snapshot) {
       if (snapshot.val() === null || snapshot.val() === undefined) {
           firebase.database().ref('login/' + username).set({
               name: name,
               email: username,
               password: password
           });
           _this.setState({
               showAlert: true,
               alertMessage: "User has been successfully register. Please login",
               alertType: 'success'
           })
       } else {
           console.log("in true")
           _this.setState({
               showAlert: true,
               alertMessage: "User already exist",
               alertType: 'warning'
           })
       }


另外,对于即使在刷新后仍保持相同的登录状态,创建会话存储对我来说似乎是一个简单的解决方案。

为什么要将用户信息再次存储在单独的表中。您可能需要调用admin.auth().listUsers在服务器端,并创建一个api来访问客户端。实际上,我正在使用google身份验证创建聊天应用程序,因此当用户登录一次时,我将获得名称、电子邮件地址等数据并存储在数据库中,但当用户再次刷新页面时,相同的数据将再次存储在另一个表中。