React原生Firebase身份验证错误
问题描述:
我正在尝试创建登录用户账户系统,并且由于某种原因导航到主屏幕后而不是之前识别了错误的密码。 (我所指的代码是login()函数)。我把控制台日志语句来确定这个和'console.log(errorCode);'是最后输出的东西。有人可以解释我写的代码的逻辑,以及为什么不正确的密码只在最后被识别? 控制台输出的顺序是 “登录” “导航首页” “登录完成” “认证/错密码? 非常感谢。React原生Firebase身份验证错误
import React, {Component} from 'react';
import {
View,
Text,
TouchableHighlight,
TouchableOpacity,
TextInput,
KeyboardAvoidingView
} from 'react-native';
import Input from './Input';
import Icon from 'react-native-vector-icons/MaterialIcons';
import {firebaseApp} from './App';
import {Tabs} from './Router';
import {StackNavigator, TabNavigator} from 'react-navigation';
import { Root } from './Router';
export default class LoginScreen extends Component {
constructor(props) {
super(props)
this.state = {
email: '',
password: '',
status: '',
success: ''
}
this.login = this.login.bind(this);
}
login(){
console.log("Logging in");
var errorCode;
var errorMessage;
firebaseApp.auth().signInWithEmailAndPassword(this.state.email, this.state.password).catch(function(error) {
errorCode = error.code;
console.log(errorCode);
errorMessage = error.message;
});
if (errorCode === 'auth/wrong-password') {
console.log("Wrong password");
alert('Wrong password.');
} else {
console.log("Navigate to Home");
this.props.navigation.navigate('Home');
}
//console.log(error);
console.log("Login finish");
/*firebaseApp.auth().signInWithEmailAndPassword(this.state.email, this.state.password).catch(function(error) {
console.log(error.code);
console.log(error.message);
})
this.props.navigation.navigate('Home');
console.log("Navigate to Home");*/
}
render() {
var styles = require('./Styles');
const {navigate} = this.props.navigation;
return(
<KeyboardAvoidingView behavior='padding' style={styles.loginContainer}>
<Text style={styles.loginHeader}>PRINCETON EVENTS</Text>
<TextInput
style={styles.loginInput}
placeholder="Email"
autoCapitalize='none'
onChangeText={(text) => this.setState({email: text})}
value={this.state.email}
returnKeyType='next'/>
<TextInput
secureTextEntry
style={styles.loginInput} placeholder="Password"
onChangeText={(text) => this.setState({password: text})}
value={this.state.password}
autoCapitalize='none'
returnKeyType='go'/>
<TouchableOpacity style={styles.loginButton}>
<Text style={styles.loginText} onPress={this.login}>LOGIN</Text>
</TouchableOpacity>
<TouchableOpacity
style={styles.loginButton}
onPress = {() => navigate('CreateAccount')}>
<Text style={styles.loginText}> CREATE ACCOUNT </Text>
</TouchableOpacity>
</KeyboardAvoidingView>
);
}
}
答
你需要处理的成功/错误情况在那里和catch块。
firebaseApp.auth().signInWithEmailAndPassword(this.state.email, this.state.password)
.then(function() { //Auth is successful
this.props.navigation.navigate('Home');
}
.catch(function(error) {
errorCode = error.code;
errorMessage = error.message;
if (errorCode === 'auth/wrong-password') {
console.log("Wrong password");
alert('Wrong password.');
} else {
console.log("Navigate to Home");
this.props.navigation.navigate('Home');
}
});