我使用 Firebase SDK (Web) 进行用户登录。

这是一个链接

Authenticate with Firebase using Password-Based Accounts

我使用此代码创建了用户帐户,我可以成功创建用户。

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

但我的问题是如何判断是否创造成功?

如果创建失败,代码可以捕获错误,但如果成功,我该如何捕获?

firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) { 
  // Handle Errors here. 
  var errorCode = error.code; 
  var errorMessage = error.message; 
}.catch(success){ 
  // Handle Success here 
  // I want to catch success like this 
}); 

请您参考如下方法:

createUserWithEmailAndPassword() 返回一个所谓的 promise 。 Promise 可以成功也可以失败,并且每个都有单独的子句。您可以使用 then() 子句处理成功:

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

您在文档中看不到 then() 的原因是上面遗漏了用户登录时的一些重要流程。

例如:如果重新加载页面/应用程序会发生什么? Firebase 自动将用户的 session 保存到本地存储,但代码不知道这一点。因此,您的应用可能会要求用户重新登录,这会导致体验不太好。

使用 Firebase 身份验证,最好 monitor the authentication state :

firebase.auth().onAuthStateChanged(function(user) { 
  if (user) { 
    // User is signed in. 
  } else { 
    // No user is signed in. 
  } 
}); 

每当用户登录或注销时,不会自动调用此回调。因此,无论您创建帐户、他们重新加载页面还是刷新他们的短期 token - 第一个 block 中的代码都将执行。类似:无论用户的 session 过期、注销还是由于其他原因注销 - 第二个 block 中的代码都将运行。

通过这种方式,您只有一个位置来处理用户登录或注销的情况。

但是由于 createUserWithEmailAndPassword() 可能会以各种引人注目的方式失败,因此您仍然希望明确地处理这些错误。

因此,处理 createUserWithEmailAndPassword() 和监视登录状态的完整惯用代码是:

firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) { 
  var errorCode = error.code; 
  var errorMessage = error.message; 
}; 
firebase.auth().onAuthStateChanged(function(user) { 
  if (user) { 
    // User is signed in. 
  } else { 
    // No user is signed in. 
  } 
}); 


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!