Reactjs 检查Firebase登录是否成功React.js
我有一个动态渲染的应用程序。用户登录后,我想加载内容。当他们按下我的欢迎组件中的登录按钮时,我的signUpPressed函数执行:Reactjs 检查Firebase登录是否成功React.js,reactjs,firebase-authentication,Reactjs,Firebase Authentication,我有一个动态渲染的应用程序。用户登录后,我想加载内容。当他们按下我的欢迎组件中的登录按钮时,我的signUpPressed函数执行: signUpPressed = () => { console.log("signUpPressed called") let email = this.state.email let password = this.state.password firebase.auth().createUserWithEmailAndPa
signUpPressed = () => {
console.log("signUpPressed called")
let email = this.state.email
let password = this.state.password
firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) {
var errorCode = error.code
var errorMessage = error.message
console.log(errorCode)
console.log(errorMessage)
})
var user = firebase.auth().currentUser;
if (user) {
console.log("user is" + user)
this.props.handler(true)
}
}
但是,在我从应用程序组件调用传递给这个欢迎组件的处理程序之前,我必须按下它两次。我试着做了一个。然后。或者。最后,但没能弄明白。我的App.js代码如下所示:
class App extends Component {
state = {
loggedIn: false
}
handler = (val) => {
this.setState({
loggedIn: val
})
}
我该怎么办。您需要使用官方文档中的以下示例中的方法检查用户:
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
} else {
// No user is signed in.
}
});
监听器本身用于检测变化;您可以根据用户对象从内部定义登录/注销行为
当没有用户时,用户将为空,因此将发生您的注销情况
当有用户时,该对象将是真实的,触发signed-in case,其上有许多属性,如user.email等——有关更多信息,请参阅文档
您可以直接在处理程序内进行检查,或者使用处理程序标记自身之外的内容,并进行检查
好吧,我想好了(如果其他人被困在这里,我会发帖)。最后,这段代码对我有效,它让我只有在确定登录成功后才能更改父组件的状态
signInPressed = () => {
console.log("signInPressed called")
let email = this.state.email
let password = this.state.password
firebase.auth().signInWithEmailAndPassword(email, password)
.then((user) => {
if (user != null) {
console.log("user is signed in")
this.props.handler(true)
} else {
console.log("user isn't signed in")
}
})
.catch(function(error) {
var errorCode = error.code
var errorMessage = error.message
console.log(errorCode)
console.log(errorMessage)
})
}
一个好主意是将其包装在
AuthContext
中,这样他就可以在他的应用程序中的任何地方使用它。我也尝试过使用该代码,问题是如果我调用this.props.handler(true)
其中//用户登录
我会遇到关键字this
的问题。按照我现在的方式,当用户单击“登录”时,他们已登录,但是处理程序不会调用,因为它是异步的。您可以直接在处理程序内进行检查,或者使用处理程序标记自身之外的内容,并进行检查。@jackantic没有问题。由于您是新的投稿人,请温和地提醒您单击✓ 选中我答案左边的复选标记和向上箭头,向其他用户表明这解决了你的问题,这样他们在搜索时就知道了。好吧,所以我试过了,但它不起作用。。。基本上,我想知道是否有办法在登录或注册成功后运行一些代码。有什么办法可以这样做吗?