注册帐户后,如何将用户uid存储到firebase数据库?

时间:2018-09-04 02:40:45

标签: javascript firebase web firebase-realtime-database firebase-authentication

这是我在.js中的代码

$("#loginBtn").click(
function(){


var email = $("#loginEmail").val();
var password = $("#loginPassword").val();

if(email != "" && password != ""){
  $("#loginProgress").show();
  $("#loginBtn").hide();
  $("#registerBtn").hide();

  firebase.auth().signInWithEmailAndPassword(email, 
password).catch(function(error) {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;

    $("#loginError").show().text(errorMessage);
    $("#loginProgress").hide();
    $("#loginBtn").show();
    $("#register_account_Btn").hide();
    $("#back_btn").hide();

  });
 }
}
);

/* REGISTER PROCESS */

$("#register_account_Btn").click(
 function () {
var email = $("#regEmail").val();
var password = $("#regPassword").val();

if(email != "" && password != ""){
  $("#loginProgress").show();
  $("#loginBtn").hide();

  firebase.auth().createUserWithEmailAndPassword(email,
   password).catch(function(error) {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;

    $("#loginError").show().text(errorMessage);
    $("#loginProgress").hide();
    $("#loginBtn").show();
    $("#register_account_Btn").hide();
    $("#back_btn").hide();

  });
}

我在互联网上找到了它,但不知道在哪里插入。 这是正确的吗?

var uid = firebase.auth().currentUser.uid;
  firebase.database().ref().child('accounts').child(uid).set({
    email: user.email,
    userId: uid
  })

我应该创建另一个功能吗?

,这些是我的Firebase数据库中的规则。建议使用此方法吗? 附加问题: 我想创建一个用户角色:老师和学生。老师可以创建教室,添加学生,查看学生列表。学生可以查看他/她的同学和老师。我该怎么办?

    {
  "rules": {
    "users": {
      "$uid": {
        ".read": false,
        ".write": "$uid === auth.uid"
       }
      }
    }
   }

诚挚的道歉,但我对此并不陌生;(

2 个答案:

答案 0 :(得分:4)

firebase.auth().createUserWithEmailAndPassword函数返回一个Promise: firebase.User

您只会在代码中捕获异常,如果将.then链接到函数上,则可以获取用户信息并将该用户保存到数据中。

firebase.auth().createUserWithEmailAndPassword(email, password)
  .then(user => {
    // Save user here.
    return firebase.database().ref('/users/' + user.uid).set({
      email: user.email,
      uid: user.uid
    });
  })
  .catch(function(error) {
    // Handle Errors here.
  });

您在老师/学生周围的其他问题非常广泛-尝试将其缩小为一个解决方案,如果您遇到某些具体问题,则创建一个新问题。

答案 1 :(得分:1)

Firebase JavaScript SDK版本5.0.0起,createUserWithEmailAndPassword()返回一个Promise,其中包含新用户的凭据作为UserCredentials对象而不是User对象。

但是,UserCredentials对象包含User对象,因为它是user属性,您可以从@sketchthat's answer中获取新的电子邮件和用户ID。

firebase.auth().createUserWithEmailAndPassword(email, password)
  .then(credential => {
    // Save user here.
    return firebase.database().ref('/users/' + credential.user.uid).set({
      email: credential.user.email,
      uid: credential.user.uid
    });
  })
  .catch(function(error) {
    // Handle Errors here.
  });