Использование recaptcha с Firebase

Удивительно, даже когда оба продукта Google - есть нет информация, которую я могу найти о том, как интегрировать Recaptcha с Firebase. Возможно ли это? Если нет, что я могу использовать для проверки людей в приложении Firebase, у которого нет auth?

Ответ 1

Я только что опубликовал учебный блог о том, как интегрировать reCAPTCHA на веб-сайт, используя Firebase Hosting для обслуживания контента и облачных функций для Firebase для проверки ответа, полученного от reCAPTCHA. Сама функция выглядит так, предполагая, что токен ответа получен через строку запроса:

const functions = require('firebase-functions')
const rp = require('request-promise')

exports.checkRecaptcha = functions.https.onRequest((req, res) => {
    const response = req.query.response
    console.log("recaptcha response", response)
    rp({
        uri: 'https://recaptcha.google.com/recaptcha/api/siteverify',
        method: 'POST',
        formData: {
            secret: 'PASTE_YOUR_SECRET_CODE_HERE',
            response: response
        },
        json: true
    }).then(result => {
        console.log("recaptcha result", result)
        if (result.success) {
            res.send("You're good to go, human.")
        }
        else {
            res.send("Recaptcha verification failed. Are you a robot?")
        }
    }).catch(reason => {
        console.log("Recaptcha request failure", reason)
        res.send("Recaptcha request failed.")
    })
})

Ответ 2

Это довольно старый пост, но вот ответ для таких же искателей Google, как я. Теперь он встроен и супер легко настраивается:

window.recaptchaVerifier = new firebase.auth.RecaptchaVerifier('recaptcha', {
  'callback': (response) => {
    // reCAPTCHA solved, allow signInWithPhoneNumber.
    // ...
  },
  'expired-callback': () => {
    // Response expired. Ask user to solve reCAPTCHA again.
    // ...
  }
})
window.recaptchaVerifier.render()

Как упоминает tuananh, убедитесь, что вы добавили <div id="recaptcha"></div>.