使用 Firebase 登录用户时出现“auth/user-not-found”

IWI*_*IWI 4 javascript firebase firebase-authentication

我有一个连接到 monaca CLI 和 OnsenUI 的 firebase 应用程序。我正在尝试创建一个用户并在同一操作中将其登录。我可以成功创建用户,但我无法登录。当我登录时,出现以下错误

auth/user-not-found 
Run Code Online (Sandbox Code Playgroud)

和

There is no user record corresponding to this identifier. The User may have been deleted
Run Code Online (Sandbox Code Playgroud)

我确认新用户在数据库中......这是我的注册和登录代码

//signup function stuff
var login = function() {
  console.log('got to login stuff');
  var email = document.getElementById('username').value;
  var password = document.getElementById('password').value;

  //firebases authentication code
  firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
    console.log('User did not sign up correctly');
    console.log(errorCode);
    console.console.log(errorMessage);
  });

  firebase.auth().signInWithEmailAndPassword(email, password).catch(function(error) {
     console.log(error.code);
     console.log(error.message);
  });

  fn.load('home.html');


};
Run Code Online (Sandbox Code Playgroud)

Fra*_*len 6

您的流程中存在所谓的竞争条件。

当您调用createUserWithEmailAndPassword()Firebase时,开始创建用户帐户。但这可能需要一些时间,因此浏览器中的代码会继续执行。

它立即继续signInWithEmailAndPassword()。由于 Firebase 可能仍在创建用户帐户,因此此调用将失败。

对于这种情况,通常的解决方案是将调用链接在一起,例如then():

firebase.auth().createUserWithEmailAndPassword(email, password).then(function(user) {
  firebase.auth().signInWithEmailAndPassword(email, password).catch(function(error) {
     console.log(error.code);
     console.log(error.message);
  });
}).catch(function(error) {
  // Handle Errors here.
  var errorCode = error.code;
  var errorMessage = error.message;
  console.log('User did not sign up correctly');
  console.log(errorCode);
  console.console.log(errorMessage);
});
Run Code Online (Sandbox Code Playgroud)

但正如安德烈·库尔 (André Kool) 已经评论过的那样:创建一个用户已经自动登录,所以在这种情况下,您可以这样做:

firebase.auth().createUserWithEmailAndPassword(email, password).then(function(user) {
  // User is created and signed in, do whatever is needed
}).catch(function(error) {
  // Handle Errors here.
  var errorCode = error.code;
  var errorMessage = error.message;
  console.log('User did not sign up correctly');
  console.log(errorCode);
  console.console.log(errorMessage);
});
Run Code Online (Sandbox Code Playgroud)

您可能很快还想检测用户在访问您的页面时是否已登录。为此,您将使用onAuthStateChanged. 从文档:

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    // User is signed in.
  } else {
    // No user is signed in.
  }
});
Run Code Online (Sandbox Code Playgroud)