Не удалось настроить невидимый верификатор reCAPTCHA для многофакторной аутентификации в приложении react

# #reactjs #firebase #firebase-authentication #recaptcha #multi-factor-authentication

Вопрос:

Согласно этой статье, https://cloud.google.com/identity-platform/docs/web/mfa, Я пытаюсь настроить невидимую рекапчу. Однако функция обратного вызова, похоже, не срабатывает. Идея в том, что я хочу, чтобы рекапча срабатывала при нажатии кнопки и отправляла код через функцию обратного вызова, но она не работает.

Я пытаюсь активировать рекапчу с помощью следующей функции, связанной с кнопкой с идентификатором «код-кнопка».

 sendCode () {         
         
        const recaptchaVerifier = new firebase.auth.RecaptchaVerifier('code-button', {
            'size': 'invisible',            
            'callback': () => {
              // reCAPTCHA solved, you can proceed with phoneAuthProvider.verifyPhoneNumber(...).
            //   onSolvedRecaptcha();
            console.log("captcha is working")
            }            
           })
               
            recaptchaVerifier.render()               
                 
     }
 

Когда я нажимаю кнопку, чтобы отключить функцию sendCode, обратный вызов внутри recaptchaVerifier, похоже, не работает. Предполагается, что console.log «captcha работает», но это не так, когда я проверяю консоль.

Я действительно получаю следующие проблемы в консоли, но я не уверен, действительно ли они блокируют обратный вызов или заставляют перепросмотр не работать:

Укажите, следует ли отправлять файл cookie в межсайтовом запросе, указав его атрибут SameSite

Использование SharedArrayBuffer ограничено изолированными сайтами перекрестного происхождения

Я даже не знаю, как их разрешить. Согласно некоторым статьям, они кажутся проблемами, которые могут быть решены только самим Google.

Кто — нибудь знает, почему это происходит?

Спасибо.

Ответ №1:

Я сам решил эту проблему, отбросив обратный вызов изнутри, и вместо этого я просто вызвал recaptchaVerifier из другой функции по мере необходимости. Например:

Во-первых, инициализируйте рекапчу и визуализируйте ее:

 const recaptchaVerifier = new firebase.auth.RecaptchaVerifier('code-button', {
                    size: 'invisible'                    
                   });

                   recaptchaVerifier.render()
 

Затем просто позвоните туда, где это необходимо:

 user.multiFactor.getSession().then((multiFactorSession) => {
                    // Specify the phone number and pass the MFA session.
                    const phoneInfoOptions = {
                      phoneNumber: this.state.number,
                      session: multiFactorSession
                    };
                    
                    const phoneAuthProvider = new firebase.auth.PhoneAuthProvider();
                    // Send SMS verification code.
                    return phoneAuthProvider.verifyPhoneNumber(
                        phoneInfoOptions, recaptchaVerifier);
                  })