通过Nodejs搭建网站简单实现注册登录流程(2)

generateVerifyImg: function() { var _verify = { code: '', img: '' }; // 生成四位数字和字母的数字作为验证码 _verify.code = Math.random().toString(16).slice(2, 6); var Image = Canvas.Image, canvas = new Canvas(60, 30), ctx = canvas.getContext('2d'); var _rotate = (Math.random()).toFixed(2); ctx.fillStyle = '#ffcc99'; ctx.fillRect(0, 0, 60, 30); ctx.rotate(_rotate); ctx.font = 'italic 20px serif'; ctx.strokeStyle = '#424952'; // 将验证码绘制进canvas ctx.strokeText(_verify.code, 10, 20); // 生成验证码图片 _verify.img = canvas.toDataURL('image/png'); return _verify; }

然后在登录&注册的API中生成验证码图片并渲染进模板文件:

/** * @desc 登录、注册的统一入口,由前端Backbone的hash路由判断展示表单 * @param req * @param res */ toAuth: function(req, res) { var _verify = this.generateVerifyImg(); req.session.verifycode = _verify.code; var view = swig.renderFile('./views/passport/main.swig', { verify_img: _verify.img }); return res.send(view); }

其中非常关键的一步是将验证码通过session保存,以便进行验证。

随后,在接受表单post的API中加入验证码过滤逻辑:

if (!req.param('verifycode') || req.param('verifycode') !== req.session .verifycode) { return res.json({ err: rescode.invalidVerifycode, msg: "验证码不正确" }); }

项目至此已经具备了基本的验证码功能。验证码的一个重要需求是用户手动刷新验证码,下面简单讲述实现过程。

3.3 实现验证刷新功能

1.首先在前端js代码中添加验证码图片刷新事件监听:

$('.hc_container').on('click', '.form_img_verifycode', function() { console.log('换一换'); var $img = $(this); $.ajax({ url: '/getverifycode', type: 'get', dataType: 'json' }).done(function(res) { console.log('getverifycode success'); $img.attr('src', res.img); }).fail(function(res) { console.log('getverifycode failed'); }); });

2.然后配置sails的config/route.js:

// 刷新验证码 'get /getverifycode': 'Auth/AuthController.getVerifyImg'

3.在Auth/AuthController中添加getVerifyImg()API接受前端的验证码刷新请求:

getVerifyImg: function(req, res) { var _verify = this.generateVerifyImg(); req.session.verifycode = _verify.code; return res.json({ 'img': _verify.img }); }

这个API功能非常简单,获取新的验证码图片并返回给前端,但是必须谨记将验证码通过session记录。

前端通过ajax获取到新的验证码图片url替换旧图即可。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/afd9f9c34d15d3796dec6535aa5d8601.html