【问题标题】:Firebase Auth Multifactor - user object not returning multiFactor propertyFirebase Auth Multifactor - 用户对象不返回 multiFactor 属性
【发布时间】:2022-01-12 15:28:46
【问题描述】:

我正在尝试在我的网络应用中添加 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!');
            });
        });
    });
};

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

控制台错误: Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'getSession')

Firebase 项目已启用 MFA: enter image description here

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

显然将代码更改为有效:

const mfaUser = multiFactor(user);    
mfaUser.getSession().then((session) => {

但现在我在调用 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)

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

【问题讨论】:

    标签: javascript firebase firebase-authentication multi-factor-authentication


    【解决方案1】:

    改为:

    const mfaUser = multiFactor(user);    
    mfaUser.getSession().then((session) => {
    

    和:

    const phoneAuthProvider = new PhoneAuthProvider(auth);
    

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

    【讨论】:

    • 从“firebase/auth”导入 { multiFactor, PhoneAuthProvider }
    • 你在哪里找到这方面的文档?
    • 没找到,打开sdk代码查看功能
    猜你喜欢
    • 2020-11-12
    • 2022-01-23
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多