Javascript 如何停止firebase数据库中的重复
我想在我的聊天应用中进行身份验证,所以当用户登录一次时,数据将插入到firbase数据库中,但当用户刚刚刷新他的chrome时,相同的数据将再次添加,所以如果用户已经插入,我想停止重复,所以我尝试了下面提到的代码,但这不起作用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
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身份验证创建聊天应用程序,因此当用户登录一次时,我将获得名称、电子邮件地址等数据并存储在数据库中,但当用户再次刷新页面时,相同的数据将再次存储在另一个表中。