Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase:使用phoneNumber重新验证_Firebase_Firebase Authentication_React Native Firebase - Fatal编程技术网

Firebase:使用phoneNumber重新验证

Firebase:使用phoneNumber重新验证,firebase,firebase-authentication,react-native-firebase,Firebase,Firebase Authentication,React Native Firebase,我知道我可以用这样的电子邮件重新验证 var user = firebase.auth().currentUser; var credentials = firebase.auth.EmailAuthProvider.credential( user.email, 'yourpassword' ); user.reauthenticateWithCredential(credentials); 但是,如果我使用phoneNumber作为登录方法,如何重新验证?这与您使用phoneNum

我知道我可以用这样的电子邮件重新验证

var user = firebase.auth().currentUser;
var credentials = firebase.auth.EmailAuthProvider.credential(
  user.email,
  'yourpassword'
);
user.reauthenticateWithCredential(credentials);

但是,如果我使用phoneNumber作为登录方法,如何重新验证?

这与您使用phoneNumber登录的方式非常相似。您可以通过两种方式完成:

使用电话号码重新验证:

const recaptchaVerifier = new firebase.auth.RecaptchaVerifier(
    container, parameters, firebase.app());
recaptchaVerifier.render();
user.reauthenticateWithPhoneNumber(user.phoneNumber, recaptchaVerifier)
  .then((confirmationResult) => {
    return confirmationResult.confirm(prompt('Enter your SMS code'));
  })
  .then((userCredential) => {
    // User successfully reauthenticated.
  });
使用
使用凭据重新身份验证

const recaptchaVerifier = new firebase.auth.RecaptchaVerifier(
    container, parameters, firebase.app());
recaptchaVerifier.render();
const phoneAuthProvider = new firebase.auth.PhoneAuthProvider(auth);
phoneAuthProvider.verifyPhoneNumber(user.phoneNumber, recaptchaVerifier)
  .then((verificationId) => {
    const credential = firebase.auth.PhoneAuthProvider.credential(
        verificationId, prompt('Enter your code'));
    return user.reauthenticateWithCredential(credential);
  })
  .then((userCredential) => {
    // User successfully reauthenticated.
  });

在React Native中使用expo firebase recaptcha

import React, { useState, useEffect, useRef } from 'react';
import { Alert, Text, TextInput, TouchableOpacity, View } from 'react-native';
import * as firebase from 'firebase';
import { FirebaseRecaptchaVerifierModal } from "expo-firebase-recaptcha";


const firebaseConfig = {
  // your firebaseConfig object
  //...
};

const Reauthentication = () => {

  const recaptchaRef = useRef();

  const [code, setCode] = useState("");
  const [verificationId, setVerificationId] = useState();

  useEffect(() => {
    (async () => {
      const user = firebase.auth().currentUser;
      const result = await user.reauthenticateWithPhoneNumber(user.phoneNumber, recaptchaRef.current);
      setVerificationId(result);
    })()
  }, []);


  const reauthenticate = () => {
    verificationId.confirm(code)
    .then((userCredential) => {
      // User is reauthenticated
    })
    .catch((err) => {
      Alert.alert(err);
    })
  }

  return (
    <View style={ styles.container }>
      <FirebaseRecaptchaVerifierModal
        ref={ recaptchaRef }
        firebaseConfig={ firebaseConfig }
      />
      <TextInput
        keyboardType="numeric"
        value={ code }
        onChangeText={ (text) => setCode(text) }
      />
      <TouchableOpacity onPress={ reauthenticate }>
        <Text>Reauthorize</Text>
      </TouchableOpacity>
    </View>
  )
}

export default Reauthentication;
import React,{useState,useffect,useRef}来自'React';
从“react native”导入{Alert、Text、TextInput、TouchableOpacity、View};
从“firebase”导入*作为firebase;
从“expo firebase recaptcha”导入{firebase RecaptchaverifierModal};
常量firebaseConfig={
//您的firebaseConfig对象
//...
};
常量重新验证=()=>{
const recaptchaRef=useRef();
const[code,setCode]=useState(“”);
const[verificationId,setVerificationId]=useState();
useffect(()=>{
(异步()=>{
const user=firebase.auth().currentUser;
const result=wait user.reauthenticateWithPhoneNumber(user.phoneNumber,recaptchaRef.current);
setVerificationId(结果);
})()
}, []);
常量重新验证=()=>{
验证ID.确认(代码)
。然后((userCredential)=>{
//用户已重新验证
})
.catch((错误)=>{
警惕。警惕(错误);
})
}
返回(
设置代码(文本)}
/>
重新授权
)
}
导出默认重新验证;

另一种方法是注销用户并重定向到登录页面