阿豪的个人博客网站_专注于web项目前端、后端、api接口、小程序、公众号、WordPress模板开发。

上帝想阻止邪恶,但却做不到?那么,他不是万能的。他是能做得到,但不愿意去做?那么,他是恶意的。难道他能做而且又愿意做?那么,邪恶从何而来?难道他既做不到又不愿意做?那么,为什么还称他为神呢? - 伊壁鸠鲁

国内使用Google reCAPTCHA 2/3 验证码的方法

国内使用reCAPTCHA只需要将 www.google.com 替换成 www.recaptcha.net, 即可在国内使用 recaptcha 的服务。


 https://www.google.com/recaptcha/api.js 替换成 https://www.recaptcha.net/recaptcha/api.js,

https://www.google.com/recaptcha/api/siteverify 替换成 https://www.recaptcha.net/recaptcha/api/siteverify。

官方文档:https://developers.google.com/recaptcha/docs/v3

使用前先去注册一对密钥一个用于前端,一个用于后端。注册地址:https://www.google.com/recaptcha/admin/create

前端代码例子:

<script src="https://www.recaptcha.net/recaptcha/api.js?render=客户端代码"></script>
<script src="//cdn.jsdelivr.net/combine/gh/jquery/jquery/dist/jquery.min.js"></script>
<script>
    grecaptcha.ready(function () {
        console.log("reCAPTCHA载入成功")
    });
    $('#submit').click(function () {
        var d = {};
        var t = $('form').serializeArray();
        $.each(t, function () {
            d[this.name] = this.value;
        });
        console.log(d)
        grecaptcha.execute('客户端代码', { action: 'homepage' }).then(function (token) {
            d["recaptcha"] = token
            $.ajax({
                type: 'post',
                data: d,
                url: 'verify',
                cache: false,
                dataType: 'text',
                success: function (data) {
                    if (data == "1") {
                        $("#ok").text("通过验证,您不是机器人")
                    } else {
                        $("#ok").text("未通过验证,请重新测试")
                    }
                    console.log(data)
                }
            })
        })
    });
</script>

后端代码声示例:Python(flask)

@app.route('/verify', methods=['POST'])
def verify():
    if request.method == 'POST':
        verification = request.form['recaptcha']
        datas = {
            'secret': "服务器端代码",
            'response': verification
        }
        k = requests.post(
            "https://recaptcha.net/recaptcha/api/siteverify", data=datas)
        print(k.text)
        kk = eval(k.text.replace('"', "'").replace(
            'true', "1").replace('false', "2"))
        if kk["success"] == 1:
            return "1"
        else:
            return "0"

同时可使用下面的命令对右下角的标志进行隐藏

<style>
.grecaptcha-badge {
		visibility: hidden !important;
    }
</style>

<!-- 但是谷歌强烈建议在网站上保留下面的标识 -->

<small>This site is protected by reCAPTCHA and the Google  <a href="https://policies.google.com/privacy">Privacy Policy</a> and <a href="https://policies.google.com/terms">Terms of Service</a> apply.
</small>


<!-- 自行翻译的中文版 -->

<small>本网站受RECAPTCHA和谷歌<a href="https://policies.google.com/privacy">隐私政策</a>及<a href="https://policies.google.com/terms">服务条款</a>的保护。
</small>
{{model.comment_total}} 条评论
Loading...
更多评论