Firebase: повторная аутентификация с помощью phoneNumber

Я знаю, что могу повторно аутентифицироваться с помощью такого письма.

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

Но как я могу повторно аутентифицироваться, если я использую phoneNumber в качестве метода входа?


person rendom    schedule 12.02.2019    source источник
comment
другой способ - просто выйти из системы и перенаправить пользователя на страницу входа stackoverflow.com/a/62563840/3073272   -  person GorvGoyl    schedule 24.06.2020


Ответы (2)


Это очень похоже на то, как вы входите в систему с помощью номера телефона. Сделать это можно двумя способами:

Использование reauthenticateWithPhoneNumber:

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.
  });

Использование reauthenticateWithCredential:

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.
  });
person bojeil    schedule 21.02.2019

В 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;
person Scott    schedule 08.10.2020