[英]I don't understand why firebase.auth().signInWithEmailAndPassword(email, password) does not work
[英]Why firebase signInWithEmailAndPassword doesn't trigger onAuthChange?
当用户登录时,我触发了以下功能:
const auth = firebase.auth();
export const signIn = ( email, password ) => (
auth.signInWithEmailAndPassword( email, password )
.catch(e => e ? console.log(e) : console.log(auth.currentUser))
);
如果我输入了不正确的详细信息,则错误将记录到控制台中,但是如果详细信息正确,则什么也不会发生。
当我在devtools中检查网络数据时,请求将返回应有的所有数据,但是在应用程序内部, auth.currentUser
是未定义的(登录后也将进行检查)。
而且因为不太令人惊讶,
export const getUser = () => (
async dispatch => (
auth.onAuthStateChanged(user => {
const { uid } = user = {};
console.log(user)
if (uid) {
console.log(uid)
dispatch(
setUserId(
uid
)
)
} else {
console.log("nologin")
}
})
)
);
刚开始时,在应用程序加载时使用undefined
和nologin
触发。 在Firebase控制台内部,启用了电子邮件和密码身份验证,并且用户有效。 我知道它应该工作,因为我以相同的方式通过Firebase进行了许多身份验证过程,因此,如果您遇到相同的问题并解决了问题,那么我无法提供更多信息,请告诉我。
是的,我认为这与Firebase设计的异步特性有关。 因此signInWithEmail ...可以工作,但是不会立即反映出currentUser对象的更改。 而是使用事件onAuthStateChanged执行与currentUser相关的任何代码。 该过程将是:
注册onAuthStateChanged事件,并在其中检测到currentUser == null,此事件将始终在第一个定义中以null用户被调用,因此通过在其中放入if可以检测何时处理实际登录。
添加signIn函数,但不要在此处使用currentuser在回调上执行任何操作,而是将相关代码移动到onAuthStageChanged。
另外,不是100%确保必须将事件包装在模块中并导出,还是应该这样做。 在做网络应用程序时,每个页面都应该是无状态且独立的,因此每个页面都应该有自己的脚本代码来检查auth事件并做适当的事情。
我是那样做的,到目前为止一直都在工作。 祝好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.