nodejs的验证码创建

时间:2011-11-15 06:52:14

标签: node.js captcha

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

5 个答案:

答案 0 :(得分:5)

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

captchapng

功能

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

它将生成png,如:

enter image description here

这是我的代码:

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});
};

答案 1 :(得分:4)

您可以使用nodejs-recaptcha

以下是我使用Express框架处理ajax postrequest以显示受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);
});

答案 2 :(得分:2)

nodejs-recaptcha,但我不知道它有多成熟。

答案 3 :(得分:1)

签出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证书即可集成到您的网站中。非常适合大学/业余爱好项目

答案 4 :(得分:-1)

简单的验证码实现

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