Firebase身份验证在我的本机应用程序中不起作用

时间:2018-08-03 02:24:46

标签: reactjs firebase react-native firebase-authentication

我是本机的新手。我创建了一个处理登录和注册的表单。当用户输入电子邮件和密码时,如果电子邮件和密码有效,则用户会收到一条有关他已登录的消息,如果电子邮件地址不存在,则会创建一个新用户。但是,仅在创建用户工作时,登录无效

我的登录表格:

import React, { Component } from 'react';
import { Text } from 'react-native';
import firebase from 'firebase';
import { Button, Card, CardSection, Input, Spinner } from './common';

class LoginForm extends Component{

    state={
        email:'christian.lisangola@gmail.com',
        password:'',
        error:'',
        loading:false
    };


    onButtonPress(){

        const { email, password} = this.state;
        this.setState({ error:'', loading:true });
        //Catch c'est pour gerer le cas d'echec de la requete precedante
        firebase.auth().signInWithEmailAndPassword(email, password)
        .then( this.onLoginSuccess.bind(this) )
        .catch( () => {
            firebase.auth().createUserWithEmailAndPassword(email, password)
            .then(this.onLoginSuccess.bind(this))
            .catch( this.onLoginFailed.bind(this) );
        });
    }

    onLoginSuccess(){
        this.setState({ 
            error: '', 
            loading: false,
            email : '',
            password :''
        });
        console.log("Logged succefully")
    }

    onLoginFailed(error){
        this.setState({
            error: 'Authentication Failed.', 
            loading: false
        });
        console.log(error.code);
        console.log(error.message);
    }

    renderButton(){
        if(this.state.loading){
            return <Spinner spinnerSize="small" />;
        }
        return (
            <Button onPress={this.onButtonPress.bind(this)}>Login</Button>
        )
    }

    render(){
        return (
            <Card>
                <CardSection>
                   <Input 
                   secureTextEntry={ false }
                        placeholder='user@gmail.com'
                        label='Email'
                        value={ this.state.email }
                        onChangeText={ emailValue => this.setState({email: emailValue}) }
                   />
                </CardSection>

                <CardSection>
                <Input 
                secureTextEntry={ true }
                    placeholder='password'
                    label='Password'
                    value={ this.state.password }
                    onChangeText={ pwdValue => this.setState({password: pwdValue}) }
                />
                </CardSection>

                <Text style={ styles.errorTextStyle }>{ this.state.error }</Text>

                <CardSection>
                    { this.renderButton() }
                </CardSection>
            </Card>
        );
    }
}

我得到的错误代码是auth/network-request-failed,错误消息是A network error (such as timeout, interrupted connection or unreachable host) has occurred.,但是我的设备可以连接互联网。添加新用户可以正常工作。

我已按照此链接中的官方文档中所述进行了所有操作:https://firebase.google.com/docs/auth/web/password-auth

1 个答案:

答案 0 :(得分:0)

我遇到了同样的错误,经过一番挖掘,我找到了原因:

emulator time issue

之所以会这样,是因为emulatornetwork的时间不同。 如果您手动将emulator时间更改为与network时间相同,那么它将起作用,至少对我有用。