我使用 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.
}
});