私はカスタムfirebase認証方法を作っていますが、これまではユーザー情報を収集してsocket.ioでサーバーに送信した後、検証がうまくいけばfirebase。これは私がこれまでに得たものであるが、私はfirebaseに挿入を開始するとき、console.log()
は複数回firebase試行が必要以上に挿入することを意味呼び出さ:Firebaseの.on()メソッドが複数回起動される
io.on("connection", socket => {
socket.on("register", user => {
console.log("Register") //gets called once, this is good!
let db = firebase.database();
let usersRef = db.ref("users").child(user.username);
firebase.database().ref("users").on("value", data => { //here we read from DB
console.log('Firebase begins here!') //this gets loged multiple times
let isValid = true; //simple var to check if validation is true/false
for (var el in data.val()) { //here we take user informations
if(data.val()[el]["name"]==user.username) { // check if username exists
console.log("Username already takken!") //gets fired more time
socket.emit("username")
isValid = false;
break;
}
if(data.val()[el]["email"]==user.email) {
console.log("Email is already takken!") //same story
socket.emit("email")
isValid = false;
break;
}
} //end of for in loop
console.log(isValid);
if(isValid) {
usersRef.set({
name: user.username,
email:user.email,
password: user.password,
balance: 0
})
}
} , errorObject => {console.log("The read failed: " + errorObject.code)})});});
良い部分はisValid
変数を防ぐということです最初の挿入後にisValid
がfalseに変更され、データが挿入されないため、複数回挿入する必要があります。とにかく、これは私が本当に探しているものではありません。理想的なのは、.on()メソッドを5〜6回ではなく1回だけ使用することです。
これは私のconsole.logsの様子です。
BIG UPDATE:この問題は、挿入が開始されたときにのみ発生します。すでにユーザー名とメールアドレスが同じ場合、再設定されません。タイ!
を試してみましょうuch!それは最高です!私にチップを与えることができれば、socket.ioを使って登録方法としては良いですか?私は多くの人がbodyParserとpostメソッドを使っているのを見ました。 –