2016-12-03 127 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创建新用户帐户之前验证验证码。 –