【问题标题】:'Email is badly formatted' react-native firebase'电子邮件格式错误' react-native firebase
【发布时间】:2017-12-09 09:09:56
【问题描述】:

这就是我所说的firebase auth:

onButtonPress() {
    const {email, password} = this.state;
    console.log(email,password);
    firebase.auth().signInWithEmailAndPassword(email, password)
        .catch( (err) => {
            console.log(err);
              firebase.auth().createUserWithEmailAndPassword(email, password)
                 .catch( (err) => {
                     console.log(err);
                    this.setState({ error: err.message });
             });
        });
   }

这是我的授权文本输入:

<Card>
        <CardSection>
            <Input
                secureTextEntry={false}
                label={'E-mail'}
                placeholder={'user@gmail.com'}
                onChangeText={(email) => this.setState({email})}
                value={this.state.email}
            />
        </CardSection>

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

            />
        </CardSection>
        <Text style={styles.errorStyle}>{this.state.error}</Text>
        <CardSection>
            <Button onPress={this.onButtonPress.bind(this)}>
                Log In
            </Button>
       </CardSection>
</Card>

但是当它运行时,它会向我显示如下消息:

即使我没有在输入中输入任何电子邮件和密码并按提交,也会弹出此错误。

【问题讨论】:

  • 我们能看到 onButtonPress 方法吗?有什么问题?是的,空的不是格式正确的电子邮件
  • @cladClad 我已经更新了问题。

标签: firebase react-native


【解决方案1】:

由于 this.state.email 导致的默认空间导致错误发生。使用 trim() 并将其发送到服务器阻止了错误的发生。这是一段工作代码。

const {email, password} = this.state;
    this.setState({ error: '', loading: true });
    firebase.auth().signInWithEmailAndPassword(email.trim(), password)
        .then(this.onLoginSuccess.bind(this))
        .catch( (err) => {
            firebase.auth().createUserWithEmailAndPassword(email.trim(), password)
                .then(this.onLoginSuccess.bind(this))
                .catch(this.onLoginFailed.bind(this));
        });

【讨论】:

  • 它说 email.trim() 函数 .trim() 没有定义!
【解决方案2】:

您的代码错误,您的创建用户函数位于登录捕获块中。将它们分开,只需在创建用户时执行此操作:我的意思是注册。

firebaseRef.auth().createUserWithEmailAndPassword(this.state.email, this.state.password).then((userData) =&gt; {//userData}).catch((error) =&gt; {//error});

用于登录:

firebaseRef.auth().signInWithEmailAndPassword(this.state.email, this.state.password).then((userData) =&gt; {//userData}).catch((error) =&gt; {//error});

而且您在注册时已经登录

注意:firebaseRef 是 Firebase.initializeApp(config) 的引用;

【讨论】:

  • 我尝试使用您的代码,得到了同样的错误。代码:“auth/invalid-email”,消息:“电子邮件地址格式错误。”
  • 注册过程是否成功?您是否正确地向服务发送电子邮件?如果你做的一切都正确,我不确定为什么会发生。
  • 是的,我发现 this.state.email 中有多余的空间。 trim() 使我摆脱了这个问题。现在遇到一个新问题。发生网络错误(如超时、连接中断或主机无法访问)。
  • 当我第一次使用 firebase 时,我意识到 react native 调试器会导致诸如 firebase 的“网络错误”之类的问题,我不记得为什么或如何解决这个问题。关闭调试器并再次尝试查看它的调试器。
  • 看看这个:github.com/invertase/react-native-firebase 这是一个到原生端的小型 JS 桥,我认为它可以解决你的调试器问题。
猜你喜欢
  • 2021-01-03
  • 2019-06-27
  • 2017-02-01
  • 1970-01-01
  • 2018-02-18
  • 2018-09-24
  • 2020-04-15
  • 2017-08-17
  • 2020-02-27
相关资源
最近更新 更多