web-dev-qa-db-ja.com

ユーザーが存在するかどうかをFirebase Detecting

React Nativeを介してSignup ButtonのFirebase Authにユーザーが存在することを確認するにはどうすればよいですか?

これは私のログインページコードです:

export default class Login extends Component {
    constructor(props) {
        super(props)
        this.state = {
            email: '',
            password: '',
            response: ''
        }
        this.signUp = this.signUp.bind(this)
        this.login = this.login.bind(this)
    }

    async signUp() {
        try {
            await firebase.auth().createUserWithEmailAndPassword(this.state.email, this.state.password)
            this.setState({
                response: 'Account Created!'
            })
            setTimeout(() => {
                this.props.navigator.Push({
                    id: 'App'
                })
            }, 500)
        } catch (error) {
            this.setState({
                response: error.toString()
            })
        }
    }
    async login() {
        try {
            await firebase.auth().signInWithEmailAndPassword(this.state.email, this.state.password)
            this.setState({
                response: 'user login in'
            })

            setTimeout(() => {
                this.props.navigator.Push({
                    id: 'App'
                })
            })

        } catch (error) {
            this.setState({
                response: error.toString()
            })
        }
    }

    render() {
        return (
            <View style={styles.container}>
                <View style={styles.containerInputes}>
                    <TextInput
                        placeholderTextColor="gray"
                        placeholder="Email"
                        style={styles.inputText}
                        onChangeText={(email) => this.setState({ email })}
                    />
                    <TextInput
                        placeholderTextColor="gray"
                        placeholder="Password"
                        style={styles.inputText}
                        password={true}
                        secureTextEntry={true}
                        onChangeText={(password) => this.setState({ password })}
                    />
                </View>
                <TouchableHighlight
                    onPress={this.login}
                    style={[styles.loginButton, styles.button]}
                >
                    <Text
                        style={styles.textButton}
                    >Login</Text>
                </TouchableHighlight>
                <TouchableHighlight
                    onPress={this.signUp}
                    style={[styles.loginButton, styles.button]}
                >
                    <Text
                        style={styles.textButton}
                    >Signup</Text>
                </TouchableHighlight>
            </View>
        )
    }
}
9

FetchSignInMethodsForEmail APIを使用する必要があります。メールを受け取り、すでに登録されている場合はそのメールにリンクされているプロバイダーのリストで解決するプロミスを返します。 https://firebase.google.com/docs/reference/js/firebase.auth.Auth .html#fetchsigninmethodsforemail

17
bojeil

とてもシンプルです。 then()とcatch()をsignUp関数のfirebaseメソッドに追加します。

firebase.auth().createUserWithEmailAndPassword(this.state.email, this.state.password)
.then(()=>{
    console.log('Signup successful.');
    this.setState({
            response: 'Account Created!'
        })
   })
.catch((error)=> {
    console.log(error.code);
    console.log(error.message);
  });

さまざまなエラーコードに関する情報:

  • auth/email-already-in-use

    指定したメールアドレスのアカウントがすでに存在する場合にスローされます。

  • auth/invalid-email

    電子メールアドレスが無効な場合にスローされます。

  • auth/operation-not-allowed

    電子メール/パスワードアカウントが有効でない場合にスローされます。 Firebase Consoleの[認証]タブでメール/パスワードアカウントを有効にします。

  • auth/weak-password

    パスワードの強度が十分でない場合にスローされます。

2
AmanDeepSharma