2016-10-16 47 views
1

問題:如何使用Node.js在Firebase中註冊用戶?

0)用戶被在火力地堡的身份驗證系統(I看到它在驗證標籤)創建的,

1)但是,沒有改變對數據庫進行。

2)頁面似乎被無限加載。

3)僅 「開始1 ...」 登錄到控制檯。


CODE:

router.post('/register', function(req, res, next) { 
    var username = req.body.username; 
    var email = req.body.email; 
    var password = req.body.password; 
    var password2 = req.body.password2; 

    // Validation 
    req.checkBody('username', 'Username is required').notEmpty(); 
    req.checkBody('email', 'Email is required').notEmpty(); 
    req.checkBody('email', 'Email is not valid').isEmail(); 
    req.checkBody('password', 'Password is required').notEmpty(); 
    req.checkBody('password2', 'Passwords do not match').equals(req.body.password); 

    var errors = req.validationErrors(); 

    if(errors){ 
     res.render('users/register', { 
      errors: errors 
     }); 
    } else { 
     console.log("Started 1..."); 
     firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error, userData) { 
      console.log("Started 2..."); 
      if(error){ 
       var errorCode = error.code; 
       var errorMessage = error.message; 
       req.flash('error_msg', 'Registration Failed. Make sure all fields are properly filled.' + error.message); 
       res.redirect('/users/register'); 
       console.log("Error creating user: ", error); 
      } else { 
       console.log("Successfully created"); 
       console.log("Successfully created user with uid:", userData.uid); 
       var user = { 
        uid: userData.uid, 
        email: email, 
        username: username 
       } 

       var userRef = firebase.database().ref('users/'); 
       userRef.push().set(user); 

       req.flash('success_msg', 'You are now registered and can login'); 
       res.redirect('/users/login'); 
      } 

     }); 
    } 
}); 

編輯1:

這是什麼似乎是發生的事情:在身份驗證系統中創建

用戶。頁面加載大約5分鐘(非常長!),然後告訴我註冊失敗,因爲電子郵件地址已被使用(不是)。

這似乎是創建的用戶,而是因爲,如果它沒有被創建,創建後的用戶,因此創建類型的錯誤代碼循環回註冊失敗:這個電子郵件地址已經在我們的數據庫。

但爲什麼會發生這種情況?

回答

4

不知道這一切,但這裏是我想發生:創建

用戶,但你沒有正確地處理它。沒有處理成功案例(履行承諾),只有被拒絕的案例。另外,當您在發生錯誤時嘗試寫入數據庫時​​,這意味着用戶未通過身份驗證,這意味着如果您尚未更改Firebase安全規則,則無法寫入。 (默認火力安全規則可以防止非認證用戶讀取/寫入到數據庫)

這一行:

firebase.auth().createUserWithEmailAndPassword(email,password) .catch(function(error, userData) { ...

應該改成這樣:

firebase.auth().createUserWithEmailAndPassword(email, password) .then(userData => { // success - do stuff with userData }) .catch(error => { // do stuff with error })

請注意,發生錯誤時,您將無法訪問userData,只是出現錯誤。

希望這會有所幫助!

+0

謝謝!不知何故,我知道我的語法錯了。目前正在學習Node.js. – Coder1000