2016-12-03 26 views
12

Co zaskakujące - jeszcze więcej, gdy obie są produktami Google - są informacje, które mogę znaleźć na temat integracji programu Recaptcha z Firebase pod numerem no. Czy to możliwe? Jeśli nie, to w jaki sposób mogę zweryfikować ludzi w aplikacji Firebase, która nie ma auth?Używanie recaptcha z Firebase

+0

W tej chwili też się nad tym zastanawiam. Wróci z odpowiedzią lub aktualizacją, gdy coś mam. –

+0

Nie rozpocząłem jeszcze mojego rozwiązania, jednak zamierzam użyć funkcji Cloud Functions for Firebase do https://firebase.google.com/docs/functions/, aby zintegrować się z Recaptcha. Istnieją podobne przypadki użycia tutaj: https://github.com/firebase/functions-samples –

+0

Nie wiem, czy jestem za późno. Teraz jest funkcja chmury Firebase. Możesz napisać na nim swój własny backend API w javascript. Zamiast wywoływać bazę danych firebase bezpośrednio z klienta, wywołujesz swój niestandardowy interfejs API za pomocą funkcji chmury Firebase na kliencie i uwierzytelniasz tam reCaptcha i robisz coś z twoją bazą danych jako administrator (firebase-admin). Próbowałem i działa dobrze. – pupuupup

Odpowiedz

5

Właśnie opublikowałem tutorial blog o tym, jak zintegrować reCAPTCHA w witrynie internetowej za pomocą Firebase Hosting, aby udostępniać treść i funkcje w chmurze dla Firebase do sprawdzania poprawności odpowiedzi otrzymanej z reCAPTCHA. Sama funkcja wygląda tak, zakładając, że token odpowiedź jest odbierana za pośrednictwem łańcucha zapytania:

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.") 
    }) 
}) 
+0

Czy są jakieś alternatywy dla za pomocą obietnicy złożenia zamówienia. 'const rp = require ('request-promise')'? –

+0

Co jeśli chcę tego użyć, zanim zezwolę użytkownikom na OAuth z Facebookiem lub Google? –

+1

Możesz użyć dowolnej biblioteki klienta HTTP, pod warunkiem, że postępujesz zgodnie ze specyfikacją interfejsu API reCAPTCHA. Możesz to zrobić, kiedy tylko chcesz. –

4

Jest to dość stary post, ale tutaj jest odpowiedź dla wyszukiwarki Google facet jak ja. To teraz wbudowany, i bardzo łatwy do skonfigurowania:

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() 

Jak tuananh wspomina, upewnij się dodać <div id="recaptcha"></div>.

+0

Aby anulować wyjątek "Błąd: kontener reCAPTCHA nie został znaleziony lub zawiera już elementy wewnętrzne". Proszę dodać element o id = "recaptcha", np:

tuananh

+0

@tuananh Bardzo pomocne, dzięki Alan – Patrickkx

+0

Po prostu chcę zauważyć, że ta metoda używa "firebase.auth", która nie jest poprawna dla uwierzytelniania po stronie serwera lub implementacji node.js . Jest tylko "wbudowany" dla projektów javascript po stronie klienta. Powyższa metoda autorstwa Douga Stevensona jest konieczna dla każdego, kto robi renderowanie po stronie serwera. Na przykład, jeśli chcesz, aby funkcje Firebase weryfikowały captcha przed wysłaniem danych użytkownika do innej funkcji, aby utworzyć nowe konto użytkownika przy użyciu SDK administratora. –

Powiązane problemy