2016-12-03 214 views
12

令人驚訝的,更當兩者都是谷歌的產品,有沒有信息,我可以找到如何使用的Recaptcha集成火力地堡。它甚至有可能嗎?如果沒有,我可以使用什麼來驗證沒有身份驗證的Firebase應用上的人員?與使用驗證碼火力地堡

+0

我目前也在研究這個。當我有東西的時候會回覆一個答案或者更新。 –

+0

我還沒有開始對我的解決方案還沒有,不過,我希望使用雲功能的火力地堡到https://firebase.google.com/docs/functions/與整合的Recaptcha。這裏也有類似的用例:https://github.com/firebase/functions-samples –

+0

我不知道我是否太遲。現在有Firebase的雲端功能。你可以在JavaScript上編寫你自己的後端API。您不必直接從客戶端調用Firebase數據庫,而是通過客戶端上的Firebase雲端功能調用您的自定義API,並在那裏驗證reCaptcha並以管理員身份(firebase-admin)對數據庫執行某些操作。我試過了,它工作正常。 – pupuupup

回答

5

我剛剛發佈了一個tutorial blog關於如何將reCAPTCHA集成到網站中,該網站使用Firebase託管來爲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.") 
    }) 
}) 
+0

是否有任何替代品使用請求承諾。 'const rp = require('request-promise')'? –

+0

如果我想在用戶使用Facebook或Google的OAuth之前使用此功能,那該怎麼辦? –

+1

只要您遵循reCAPTCHA API的規範,您就可以使用任何您喜歡的HTTP客戶端庫。你可以隨時做到這一點。 –

4

這是一個很老的文章,但這裏的同胞谷歌搜索和我一樣的答案。它現在的內置,以及超級簡單設置:

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>

+0

若要無效例外「錯誤:找不到reCAPTCHA容器或已經包含內部元素」。請使用id =「驗證碼」,前添加元素:

tuananh

+0

@tuananh非常有幫助,感謝艾倫 – Patrickkx

+0

我只是想指出,這種方法使用「firebase.auth」,這不適用於服務器端認證或執行的Node.js 。它只是用於客戶端JavaScript項目的「內置」。 由Doug史蒂文森上面的方法是必要的任何人做服務器端呈現。例如,如果您希望Firebase函數在將用戶輸入發送到另一個函數以使用admin SDK創建新用戶帳戶之前驗證驗證碼。 –