Firebase-验证用户身份,然后写入数据库?

时间:2020-09-05 09:40:41

标签: html firebase firebase-realtime-database firebase-authentication

Firebase的全新功能。我已经找到一种验证用户身份的方法,但是现在我正努力将其添加到实时数据库中。这是我在注册页面上使用的代码。如何将用户添加到数据库中?

<style>.row{border: 1px solid blue; padding: 0px;margin-top: 0px;margin-bottom: :0px;;}.numbcell{background-color:#355DB2;color: #FFFFFF;text-align: right;font-family: 'Helvetica Neue', Helvetica, Arial, Verdana;}.cell{padding:0px;background-color: #FFF6A6;}.cellp{line-height: 110%;color: #05007E;padding: 0px;margin-top:0px;margin-bottom: 0px;font-family: Courier, 'Courier New';}.comment{color:#A1A1A1;}</style><script src='//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js'></script><div><table class="codetable"><tbody><tr class="row"><td class="numbcell">1</td><td class="cell"><p class="cellp" style="margin-left: 0px;">&lt;script&gt;</p></td></tr><tr class="row"><td class="numbcell">&nbsp;</td><td class="cell"><p class="cellp" style="margin-left: 0px;"></p></td></tr><tr class="row"><td class="numbcell">2</td><td class="cell"><p class="cellp" style="margin-left: 30px;"> var signUpButton = document.getElementById("signUpButton")</p></td></tr><tr class="row"><td class="numbcell">3</td><td class="cell"><p class="cellp" style="margin-left: 30px;"> signUpButton.addEventListener('click', signup);</p></td></tr><tr class="row"><td class="numbcell">&nbsp;</td><td class="cell"><p class="cellp" style="margin-left: 0px;"></p></td></tr><tr class="row"><td class="numbcell">4</td><td class="cell"><p class="cellp" style="margin-left: 30px;"> function signup() {</p></td></tr><tr class="row"><td class="numbcell">5</td><td class="cell"><p class="cellp" style="margin-left: 60px;"> signUpButton.style.display = 'none';</p></td></tr><tr class="row"><td class="numbcell">6</td><td class="cell"><p class="cellp" style="margin-left: 60px;"> signUpError.style.display = 'block';</p></td></tr><tr class="row"><td class="numbcell">7</td><td class="cell"><p class="cellp" style="margin-left: 60px;"> var email = signUpEmail.value;</p></td></tr><tr class="row"><td class="numbcell">8</td><td class="cell"><p class="cellp" style="margin-left: 60px;"> var password = signUpPassword.value;</p></td></tr><tr class="row"><td class="numbcell">&nbsp;</td><td class="cell"><p class="cellp" style="margin-left: 30px;"> </p></td></tr><tr class="row"><td class="numbcell">9</td><td class="cell"><p class="cellp" style="margin-left: 30px;"> firebase.auth().createUserWithEmailAndPassword(email, password)</p></td></tr><tr class="row"><td class="numbcell">10</td><td class="cell"><p class="cellp" style="margin-left: 30px;"> .then(function () {</p></td></tr><tr class="row"><td class="numbcell">11</td><td class="cell"><p class="cellp" style="margin-left: 60px;"> window.location.replace('./dashboard');</p></td></tr><tr class="row"><td class="numbcell">&nbsp;</td><td class="cell"><p class="cellp" style="margin-left: 60px;"> </p></td></tr><tr class="row"><td class="numbcell">12</td><td class="cell"><p class="cellp" style="margin-left: 60px;"> <span class="comment">// this is where I try and add uid and email to realtime database</span></p></td></tr><tr class="row"><td class="numbcell">13</td><td class="cell"><p class="cellp" style="margin-left: 60px;"> function writeUserData(uid, email) {</p></td></tr><tr class="row"><td class="numbcell">14</td><td class="cell"><p class="cellp" style="margin-left: 60px;"> firebase.database().ref('users/' + uid).update({</p></td></tr><tr class="row"><td class="numbcell">15</td><td class="cell"><p class="cellp" style="margin-left: 60px;"> uid: uid,</p></td></tr><tr class="row"><td class="numbcell">16</td><td class="cell"><p class="cellp" style="margin-left: 60px;"> email: email</p></td></tr><tr class="row"><td class="numbcell">17</td><td class="cell"><p class="cellp" style="margin-left: 60px;"> })}</p></td></tr><tr class="row"><td class="numbcell">&nbsp;</td><td class="cell"><p class="cellp" style="margin-left: 0px;"></p></td></tr><tr class="row"><td class="numbcell">18</td><td class="cell"><p class="cellp" style="margin-left: 30px;"> })</p></td></tr><tr class="row"><td class="numbcell">19</td><td class="cell"><p class="cellp" style="margin-left: 30px;"> .catch(function(error) {</p></td></tr><tr class="row"><td class="numbcell">20</td><td class="cell"><p class="cellp" style="margin-left: 60px;"> var errorCode = error.code;</p></td></tr><tr class="row"><td class="numbcell">21</td><td class="cell"><p class="cellp" style="margin-left: 60px;"> var errorMessage = error.message;</p></td></tr><tr class="row"><td class="numbcell">22</td><td class="cell"><p class="cellp" style="margin-left: 60px;"> console.log('Error code: ' + errorCode);</p></td></tr><tr class="row"><td class="numbcell">23</td><td class="cell"><p class="cellp" style="margin-left: 60px;"> console.log('Error message: ' + errorMessage);</p></td></tr><tr class="row"><td class="numbcell">24</td><td class="cell"><p class="cellp" style="margin-left: 60px;"> signUpButton.style.display = 'block';</p></td></tr><tr class="row"><td class="numbcell">25</td><td class="cell"><p class="cellp" style="margin-left: 60px;"> signUpError.innerText = errorMessage;</p></td></tr><tr class="row"><td class="numbcell">26</td><td class="cell"><p class="cellp" style="margin-left: 60px;"> signUpError.style.display = 'block';</p></td></tr><tr class="row"><td class="numbcell">27</td><td class="cell"><p class="cellp" style="margin-left: 0px;">});</p></td></tr><tr class="row"><td class="numbcell">&nbsp;</td><td class="cell"><p class="cellp" style="margin-left: 0px;"></p></td></tr><tr class="row"><td class="numbcell">28</td><td class="cell"><p class="cellp" style="margin-left: 0px;">}</p></td></tr><tr class="row"><td class="numbcell">29</td><td class="cell"><p class="cellp" style="margin-left: 0px;">&lt;/script&gt;</p></td></tr></tbody></table><input type="button" value="Toggle line numbers" onclick="$(this).parent().parent().find('.numbcell').toggle(300)"></div>

1 个答案:

答案 0 :(得分:0)

与其将代码包装成一个函数来添加到实时数据库中,不如尝试立即调用该代码,使用.set()方法写入数据库,然后仅在该操作成功后才重定向:

firebase.auth().createUserWithEmailAndPassword(email, password)
  .then(function() {
    const user = firebase.auth().currentUser;
    const uid = user.uid;
    const email = user.email;
    firebase.database().ref('users/' + uid).set({
      uid: uid,
      email: email
    })
      .then(() => window.location.replace('./dashboard'))
      .catch(console.error);
  });

但是,如果您只想存储电子邮件之类的信息,则Firebase Auth已经在user's profile中为您存储了该信息,因此您可以像这样访问它:

firebase.auth().onAuthStateChanged(user => {
  if (user) {
    const uid = user.uid;
    const email = user.email;
    // ...
  }
});