使用createUserWithEmailAndPassword时添加displayName

Mar*_*arc 9 javascript firebase

我想将显示名称添加到刚刚创建的用户.但是当我创建UserUithWithEmailAndPassword时,我的currentUser为null.哪里不对了?

var name = document.getElementById("name").value;
var username = document.getElementById("username").value;
var email = document.getElementById('email').value;
var password = document.getElementById('password').value;
  // Sign in with email and pass.
  // [START createwithemail]
  firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
    // [START_EXCLUDE]
    if (errorCode == 'auth/weak-password') {
      alert('The password is too weak.');
    } else {
      console.error(error);
    }
    // [END_EXCLUDE]
  });
  // [END createwithemail]
  var user = firebase.auth().currentUser;
  user.updateProfile({
      displayName: username
    }).then(function() {
      // Update successful.
    }, function(error) {
      // An error happened.
  });
document.getElementById("submitButton").innerHTML = "Loading...";
$("#submitButton").css("background-color", "#efefef");
$("#submitButton").css("cursor", "init");
$("#submitButton").css("color", "#aaa");
registerUserToDB(username, name, email);
console.log("shouldhave worked");
Run Code Online (Sandbox Code Playgroud)

the*_*het 25

createUserWithEmailAndPassword是一个异步调用,就像Firebase中几乎所有其他函数一样.您创建用户(最有可能成功),但在您尝试抓住后立即创建currentUser.几乎在每种情况下,您都会尝试currentUser在Firebase创建用户之前获取.

重写内部回调:

firebase.auth().createUserWithEmailAndPassword(email, password).then(function(user) {
    // [END createwithemail]
    // callSomeFunction(); Optional
    // var user = firebase.auth().currentUser;
    user.updateProfile({
        displayName: username
    }).then(function() {
        // Update successful.
    }, function(error) {
        // An error happened.
    });        
}, function(error) {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
    // [START_EXCLUDE]
    if (errorCode == 'auth/weak-password') {
        alert('The password is too weak.');
    } else {
        console.error(error);
    }
    // [END_EXCLUDE]
});
Run Code Online (Sandbox Code Playgroud)

.then将被称为成功,function(error)并将被称为错误.您希望在用户创建成功后设置用户.

有些人不喜欢嵌套的回调,因此您可以创建一个获取当前用户的函数,并在成功时调用该函数.

文档:

Firebase承诺

异步,回调