【问题标题】:captcha creation for nodejs为nodejs创建验证码
【发布时间】:2011-12-29 06:31:56
【问题描述】:

我正在尝试在网站的注册页面上放置验证码。 如何在 node.js 中显示验证码?

【问题讨论】:

    标签: node.js captcha


    【解决方案1】:

    nodejs-recaptcha,但不知道成熟度如何。

    【讨论】:

      【解决方案2】:

      你可以使用nodejs-recaptcha

      这是我的示例,最后使用 Express 框架处理 ajax 后请求以显示受 reCaptcha 保护的联系人数据。

      app.post('/ajax/contact/', function(req, res, next) {
              var recaptcha = new recaptcha_async.reCaptcha();
      
              // Eventhandler that is triggered by checkAnswer()
              recaptcha.on('data', function (recaptcha_response) {
                      res.render('contact', {
                              layout: 'contact_layout.json.ejs',
                              locals: {
                                      recaptcha: recaptcha_response.is_valid ? 'valid' : 'invalid'
                                      }
                      });
              });
      
              // Check the user response by calling the google servers
              // and sends a 'data'-event
              recaptcha.checkAnswer('aLfsZvFVbAbAbzsxlnHbH7wxx0PbNbGabHXbpZgl',  // private reCaptchakey (invalidated)
                                req.connection.remoteAddress,
                                req.body.recaptcha_challenge_field,
                                req.body.recaptcha_response_field);
      });
      

      【讨论】:

      • 您忘记了您是作者的完整披露部分:) 不过模块不错。
      【解决方案3】:

      简单的验证码实现

      https://github.com/napa3um/node-captcha

      【讨论】:

        【解决方案4】:

        我找到了一个用纯js写的很聪明的:

        captchapng

        特点

        • 仅生成数字验证码 PNG 图片
        • 内置字体
        • 字符上下、左右限制、随机位移
        • 完整的 JavaScript

        它会生成像这样的png:

        这是我的代码:

        ejs -[express3.x]

        <img src="data:image/jpeg;base64,<%= valicode %>"/>
        

        js

        var captchaImg = function(){
                var p = new captchapng(80,30,parseInt(Math.random()*9000+1000)); // width,height,numeric captcha
                p.color(115, 95, 197, 100);  // First color: background (red, green, blue, alpha)
                p.color(30, 104, 21, 255); // Second color: paint (red, green, blue, alpha)
                var img = p.getBase64();
                var imgbase64 = new Buffer(img,'base64');
                return imgbase64;
        } 
        
        exports.index_get = function(req, res){
           var valicode = new Buffer(captchaImg()).toString('base64');       
           res.render('index', {'valicode' : valicode});
        };
        

        【讨论】:

        • 如何检查有效的验证码?
        • new captchapng(width,height,numeric),你可以把外面的数字放到会话范围内。
        【解决方案5】:

        查看node-captcha-generator

        它使用 MNIST 数据库生成数字验证码图像。很容易集成。我在以前的网站上使用过它,它生成的验证码图像看起来像this

        用法也很简单。下面是一个 GET 请求示例,用于在每个请求(Express)上生成一个新的验证码图像:

        let Captcha = require('node-captcha-generator');
        
        router.get('/imageGen', function(req, res, next) {
            var c = new Captcha({
                length:5, // Captcha length
                size:{    // output size
                    width: 450,
                    height: 200
                }
            });
        
            c.toBase64(function(err, base64){
                base64Data  =   base64.replace(/^data:image\/png;base64,/, "");
                base64Data  +=  base64Data.replace('+', ' ');
                console.log(base64Data);
                binaryData  =   new Buffer(base64Data, 'base64').toString('binary');
                    if(err){
                        console.log("Captcha Error");
                        console.log(err);
                    }
                    else{
                        res.contentType('image/png');
                        res.end(binaryData,'binary');
                    }
            });
        });
        

        希望这个答案有所帮助,并且与 reCaptcha 不同,不需要 HTTPS 证书即可集成到您的网站中。非常适合大学/业余爱好项目

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-08-06
          • 1970-01-01
          • 2021-09-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-13
          • 1970-01-01
          相关资源
          最近更新 更多