проверка подлинности телефона firebase, если пользователь уже существует, перед отправкой смс - PullRequest
0 голосов
/ 09 мая 2018

Я создаю реагирующее нативное приложение с помощью firebase с помощью этого act-native-firebase

и я использую аутентификацию телефона с помощью firebase auth. Я хочу проверить, если пользователь уже существует по номеру телефона в таблице аутентификации, прежде чем использовать verifyPhoneNumber . enter image description here

Поскольку у меня проблема в том, что, если пользователь уже существует в этой таблице, и я использую функцию verifyPhoneNumber с существующим номером телефона, он уже отправляет ему смс. то, что я хочу сделать, это если пользователь уже существует в этой таблице, чтобы не отправлять ему и смс и получить этого пользователя!

 confirmPhone = async (phoneNumber) => {
    return new Promise((res, rej) => {
        firebase.auth().verifyPhoneNumber(phoneNumber)
            .on('state_changed', async (phoneAuthSnapshot) => {
                console.log('phoneAUTH',phoneAuthSnapshot)
                switch (phoneAuthSnapshot.state) {
                case firebase.auth.PhoneAuthState.AUTO_VERIFIED:
                    console.log('PhoneAuthState.AUTO_VERIFIED',phoneAuthSnapshot)
                    await this.confirmCode(phoneAuthSnapshot.verificationId, phoneAuthSnapshot.code, phoneAuthSnapshot)
                    res(phoneAuthSnapshot)

                    break

                case firebase.auth.PhoneAuthState.CODE_SENT:
                    console.log('code send',phoneAuthSnapshot)
                    // await userSettings.set(AUTH_KEYS.VERIFICATION_ID, phoneAuthSnapshot.verificationId)
                    UserStore.setVerificationId(phoneAuthSnapshot.verificationId)
                    res(phoneAuthSnapshot)
                    break

                case firebase.auth.PhoneAuthState.AUTO_VERIFY_TIMEOUT: // or 'timeout'
                    console.log('AUTO_VERIFY_TIMEOUT',phoneAuthSnapshot)
                    UserStore.setVerificationId(phoneAuthSnapshot.verificationId)
                    res(phoneAuthSnapshot)


                case firebase.auth.PhoneAuthState.ERROR:
                    console.log('APhoneAuthState.ERROR',phoneAuthSnapshot)
                    UserStore.setErrorConfirmationCode(phoneAuthSnapshot.error)
                    rej(phoneAuthSnapshot)
                    break

                }
            })
    })
}

confirmCode = async (verificationId, code, phoneAuthSnapshot) => {
       try{
        const credential = await firebase.auth.PhoneAuthProvider.credential(UserStore.verificationId, code)
        UserStore.setCodeInput(code)
        UserStore.setUserCredentials(credential)
        AppStore.setAlreadyRegister(true)
        await this.authenticate(credential)
        return credential
       } catch(e){
           throw new Error(e)
       }


}

authenticate = async (credential) => {
     await firebase.auth().signInAndRetrieveDataWithCredential(credential)

}

1 Ответ

0 голосов
/ 10 мая 2018

Вы можете использовать getUserByPhoneNumber () в административной SDK. Но для Front end framework я думаю, что у нас этого нет, предлагаем вам создать записи в firestore и проверить их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...