如何知道 reCAPTCHA v3 是否有效?

2024-01-12

我的前端使用 vuetify 如下:

   validate: async function () {
    let tokenCaptcha
    await this.$recaptcha('login').then((token) => {
      tokenCaptcha = token
    })

    if (this.$refs.form.validate() && tokenCaptcha) {
        let params = {
          birthDate: this.birthday,
          emailAddress: this.email,
          name: this.fullname,
          phoneNumber: this.phone,
          recaptcha: tokenCaptcha
        }
        this.modalSummary = true
        await this.setSummary(params) // Async vuex store / post to api backend
        if (this.dataSummary) {
          this.success = true
        } else {
          this.success = false
        }
    }
  }

参考 :https://www.npmjs.com/package/vue-recaptcha-v3 https://www.npmjs.com/package/vue-recaptcha-v3

我的后端/服务器端使用express js(node js),如下所示:

app.post('/summary', function (req, res) {
    if (req.body.recaptcha === undefined || req.body.recaptcha === '' || req.body.recaptcha === null) {
        res.send({success: false, msg: 'Please select captcha first'});
        return;
    }
    const secretKey = 'xxxxxx';
    const verificationURL = `https://www.google.com/recaptcha/api/siteverify?secret=${secretKey}&response=${req.body.recaptcha}&remoteip=${req.connection.remoteAddress}`;
    https.get(verificationURL, (resG) => {
        let rawData = '';
        resG.on('data', (chunk) => { rawData += chunk })
        resG.on('end', function() {
            try {
                var parsedData = JSON.parse(rawData);
                if (parsedData.success === true) {
                    let data = { 
                        date_of_birth: req.body.birthDate,
                        email_address: req.body.emailAddress,
                        full_name: req.body.name,
                        phone_number: req.body.phoneNumber,
                    }
                    let sql = "INSERT INTO summary SET ?";
                    let query = conn.query(sql, data,(err, results) => {
                        if(err) throw err;
                        res.send({success: "OK", message: 'Success', data: data});
                    });
                } else {
                    res.send({success: false, msg: 'Failed captcha verification'});
                    return;
                }
            } catch (e) {
                res.send({success: false, msg: 'Failed captcha verification from Google'});
                return;
            }
        });
    });
});

该代码是有效的。但如何知道 reCAPTCHA v3 是否有效?

因为版本3的验证码没有出现。我只是想确定我的代码流程是否正确。除此之外,我想检查验证码是否出现,如果它是机器人


  1. 在用户界面(右下角)上,您应该看到:
  1. 在后端:获取验证码响应的结果。喜欢:
console.info(parsedData)

必须看起来像:

{
  "success": true|false,      // whether this request was a valid reCAPTCHA token for your site
  "score": number             // the score for this request (0.0 - 1.0)
  "action": string            // the action name for this request (important to verify)
  "challenge_ts": timestamp,  // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
  "hostname": string,         // the hostname of the site where the reCAPTCHA was solved
  "error-codes": [...]        // optional
}

^ https://developers.google.com/recaptcha/docs/v3#site_verify_response https://developers.google.com/recaptcha/docs/v3#site_verify_response

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何知道 reCAPTCHA v3 是否有效? 的相关文章

随机推荐

  • 将日期格式更改为 ddth mmm,yyyy

    我正在网络表单上打印一些日期 目前我的日期格式是dd mmm yyyy hh mm 如何将日期格式更改为ddth mmm yyyy for例子2016年5月17日 hh mm 这是我的代码 lastlogin DateTime Parse
  • /usr/bin/ld: 找不到 -lpthreads

    我正在 Fedora 22 上编译 NVIDIA Caffe 工具 但遇到问题需要查找lpthread图书馆 Determining if the pthread create exist failed with the following
  • 如何更改R图表中的默认字体大小

    我正在使用 R 包 cooccurr 无法弄清楚如何更改关联图形中的字体大小 par 方法似乎不起作用 这是包中给出的示例 data finches cooccur finches lt cooccur mat finches type s
  • 模块模式与匿名构造函数的实例

    于是就有了这个所谓的模块模式用于创建具有私有成员的单例 var foo function var foo private return foo function console log foo bar public 还有这个方法是我自己找到
  • 如何使用 click 来解析字符串中的参数?

    假设我有一个包含参数和选项的字符串列表 其中argparse 我可以使用以下方法解析这个列表parse args将函数转化为对象 如下 import argparse extra params sum 7 1 42 parser argpa
  • 如果中断 Git 推送会发生什么?

    我运行了以下命令 git push u origin master 推送 非常大 文件很多 所以上传需要时间 中途我发现我忘记添加几个文件 所以我做了 Ctrl C 在终端 中断 Git 然后做完之后git add 我又承诺了 然后又推了
  • DDD - 如何设计不同限界上下文之间的关联

    我已经设置了一个正在使用 ORM 填充的域项目 该域包含不同的聚合 每个聚合都有自己的根对象 我的问题是应该如何处理跨越聚合边界的属性 这些属性是否应该简单地忽略边界 以便有界上下文 A 中的域对象可以引用上下文 B 中的对象 或者 是否应
  • 如何检查一次 UserDefaults 是否为空

    我的应用程序计算日期和 NSDate 之间的天数 当我发布它时 用户只能保存一个日期 一个标题和一张背景图像 现在我有一个 UICollectionView 可以选择保存多个日期 并且它将通过将日期 标题和图像字符串附加到各自的数组来创建一
  • 分叉进程的执行顺序

    我知道还有另一个同名的线程 但这实际上是一个不同的问题 当一个进程多次分叉时 父进程是否先于子进程完成执行 反之亦然 同时 这是一个例子 假设我有一个 for 循环 将 1 个父进程分叉为 4 个子进程 在 for 循环结束时 我希望父进程
  • 使用 Json.net 反序列化具有接口值的复杂嵌套字典类型

    我在尝试使用 Json net 反序列化具有接口值的相当复杂的嵌套字典类型时遇到问题 代码位于此处 https dotnetfiddle net JSoAug https dotnetfiddle net JSoAug 有问题的类型是 pu
  • python 我可以向 os.listdir 提供用户名和密码吗?

    Python 3 4 Django 1 7 Windows Apache 2 4 12 我试图列出 Windows 共享驱动器上的所有文件 仅限某些用户 然后将几个文件写入共享驱动器 我正在使用 os listdir 来执行此操作 如果我只
  • 如何使用 Selenium webdriver 在 Capybara 中打开新窗口?

    我找到了一段代码 page driver browser switch to window 这显然是切换到已经打开的窗口 我们如何使用 page driver browser 对象打开一个新窗口 Thanks 我最终来到这里 即使是一个旧线
  • 没有匹配的函数调用“pthread_create”

    我正在使用 Xcode 和 C 制作一个简单的游戏 问题是下面的代码 include
  • 为什么在宏中使用明显无意义的 do-while 和 if-else 语句?

    在许多 C C 宏中 我看到宏的代码被包裹在看似毫无意义的内容中 do while环形 以下是示例 define FOO X do f X g X while 0 define FOO X if 1 f X g X else 我看不到什么d
  • 尽管身份密钥计数器在 TRY Catch 中且事务已回滚,但它仍会增加 1? SSMS 2008

    尽管身份计数器在 TRY Catch 中且事务已回滚 但它仍会增加 1 SSMS 2008 有什么方法可以阻止它 1 或回滚它 为了理解为什么会发生这种情况 让我们首先执行下面的示例代码 USE tempdb CREATE TABLE db
  • 将 Abaqus 宏转换为 Python 脚本

    我正在使用 Abaqus 6 13 运行 FEM 热模拟 我需要获得应用于该模型的总外部热通量 我的搜索表明 获得它的唯一方法是对整个模型的 RFLE 历史输出求和 并且效果很好 问题是我有大约 300 000 个元素模型 并且简单打开 R
  • JSON 上的 PostgreSQL 索引

    使用 Postgres9 4 我想在 json 列上创建一个索引 该索引将在搜索列中的特定键时使用 例如 我有一个 农场 表 其中包含 json 列 动物 Animals 列具有通用格式的 json 对象 cow 2 chicken 11
  • 如何在 grunt.initConfig() 之前执行异步操作?

    现在 我的 Gruntfile 设置可以执行一些自动检测魔法 例如解析源文件以解析 roder 中的一些 PHP 源 以动态找出运行前我需要知道的文件名和路径grunt initConfig 很遗憾grunt initConfig 似乎并不
  • jEditable:提交后显示选项文本(而不是值)

    我在选择列表上使用 jEditable 除了以下问题之外 它工作得很好 jEditable 在提交后显示服务器发回的任何内容 这对于文本框等非常有用 您可以在其中简单地从服务器发回提交的值 然而 这对选择列表没有意义 因为发布的值只是选项元
  • 如何知道 reCAPTCHA v3 是否有效?

    我的前端使用 vuetify 如下 validate async function let tokenCaptcha await this recaptcha login then token gt tokenCaptcha token i