Firebase Auth Multifactor - 用户对象不返回 multiFactor 属性

Dav*_*nte 5 javascript firebase firebase-authentication multi-factor-authentication

我正在尝试在我的 Web 应用程序中添加 MFA,但缺少multiFactor属性。检查代码:

import { initializeApp } from "https://www.gstatic.com/firebasejs/9.6.2/firebase-app.js";
import { getAuth, RecaptchaVerifier, PhoneAuthProvider, signInWithEmailAndPassword } 
    from "https://www.gstatic.com/firebasejs/9.6.2/firebase-auth.js";

const firebaseConfig = {
    ...
};

const app = initializeApp(firebaseConfig);
const auth = getAuth(app);

auth.onAuthStateChanged((user) => {
    const userEl = document.getElementById('user');
    if (user) {
            userEl.innerHTML = `${user.email} logged in. ${JSON.stringify(
            user.multiFactor.enrolledFactors
        )}`;
    } else {
        userEl.innerHTML = 'signed out';
    }
});

window.recaptchaVerifier = new RecaptchaVerifier('recaptcha-container', {
    'size': 'invisible',
    'callback': (response) => {
        console.log('captcha solved!');
    }
}, auth);

const enrollBtn = document.getElementById('enroll-button');

enrollBtn.onclick = () => {
    signInWithEmailAndPassword(auth, 'blabla@gmail.com', 'foobar').then(() => {
        const user = auth.currentUser;
        if (!user) {
            return alert('User not logged!');
        }

        const phoneNumber = document.getElementById('enroll-phone').value;

        console.log(user);

        user.multiFactor.getSession().then((session) => {
            const phoneOpts = {
                phoneNumber,
                session,
            };

            const phoneAuthProvider = new PhoneAuthProvider();

            phoneAuthProvider.verifyPhoneNumber(
                phoneOpts,
                window.recaptchaVerifier
            ).then((verificationId) => {
                window.verificationId = verificationId;
                alert('sms text sent!');
            });
        });
    });
};
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,user.multiFactor未定义。登录正常返回用户,但没有此属性。

控制台上的错误:未捕获(承诺中)类型错误:无法读取未定义的属性(读取“getSession”)

Firebase 项目启用了 MFA: 在此处输入图像描述

**************** 更新 *******************

显然将代码更改为有效:

const mfaUser = multiFactor(user);    
mfaUser.getSession().then((session) => {
Run Code Online (Sandbox Code Playgroud)

但现在当我调用verifyPhoneNumber时出现此错误:

VM21778 index.html:315 TypeError: Cannot read properties of undefined (reading 'tenantId')
    at _addTidIfNecessary (firebase-auth.js:1934:14)
    at startEnrollPhoneMfa (firebase-auth.js:6778:125)
    at _verifyPhoneNumber (firebase-auth.js:8500:40)
Run Code Online (Sandbox Code Playgroud)

但是我没有使用多租户选项,这在我的项目中被禁用。

Dav*_*nte 3

变成:

const mfaUser = multiFactor(user);    
mfaUser.getSession().then((session) => {
Run Code Online (Sandbox Code Playgroud)

和:

const phoneAuthProvider = new PhoneAuthProvider(auth);
Run Code Online (Sandbox Code Playgroud)

我不知道 Firebase Auth 文档是否已被弃用,或者我正在做一些不同的事情。XD