node实现登录图片验证码的示例代码


Posted in Javascript onApril 20, 2018

实现这里的图形验证码我是用的node里svg-captcha模块,可以全部支持字符和数字,全平台支持,用起来很简单。

1.安装

cnpm i svg-captcha --save

2.在使用的地方导入

var svgCaptcha = require('svg-captcha');

3.获取验证码

3-1 安装 cookie-parser ,作用是将获取到的session保存到cookie,方便前端访问验证

cnpm i cookie-parser --save

3-2 使用 cookie-parser

const cookieParase = require('cookie-parser');

app.use(cookieParase());

这样就可以在项目里使用cookie了

3-3 获取验证码

// 获取验证码
 getCaptcha(req, res, next){
  var captcha = svgCaptcha.create({ 
   // 翻转颜色 
   inverse: false, 
   // 字体大小 
   fontSize: 36, 
   // 噪声线条数 
   noise: 2, 
   // 宽度 
   width: 80, 
   // 高度 
   height: 30, 
  }); 
  // 保存到session,忽略大小写 
  req.session = captcha.text.toLowerCase(); 
  console.log(req.session); //0xtg 生成的验证码
  //保存到cookie 方便前端调用验证
  res.cookie('captcha', req.session); 
  res.setHeader('Content-Type', 'image/svg+xml');
  res.write(String(captcha.data));
  res.end();
 },

做到这只是实现了生成验证码的功能,那么要访问呢?

4.编写后台路由

// 获取验证码
router.get('/api/getCaptcha', function(req, res, next) {
 return api.getCaptcha(req, res, next);
})

当前端调用 /api/getCaptcha 这个接口的时候,返回验证码信息,是svg格式

5.前端访问

<img src="/api/getCaptcha" alt="captcha" >

node实现登录图片验证码的示例代码

但是现在我们又有需求了,当点击这个验证码的时候,验证码会刷新

6.实现点击验证码刷新

更改一下刚刚验证码的结果,给他加一个外层a标签,并给他绑定一个点击事件,我这里用了 vue ,所以是 @click ,其他框架同理.

<a href="#" rel="external nofollow" @click="editCaptcha">
  <img src="/api/getCaptcha" alt="" ref="imgYzm">
</a>

点击事件 editCaptcha

editCaptcha () {
  this.$refs.imgYzm.src = '/api/getCaptcha?d='+Math.random()
},

这样就实现了点击验证码刷新的问题

7.前端验证验证码

刚刚我们在后台得到了验证码,但是前端要怎么验证呢?

记得在3-2的时候我们安装了 cookie-parser ,并且在3-3里将生成的session保存在cookie里,这里我们前端就可以通过访问这个cookie拿到验证码的值了。

node实现登录图片验证码的示例代码

为什么要保存在cookie里? 因为后端生成的session我们前端是访问不到的,如果等访问到的话,那还谈什么安全性可言,所以保存一份在cookie里供前端访问。

let captcha = document.cookie.split('=')[1]
  if(this.yzm != captcha){
   return this.$message.warning('验证码错误')
  }

最后的前端输入账号密码验证码做登录验证等等我就不多概述了。具体思想就是这样。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript showModalDialog模态对话框使用说明
Dec 31 Javascript
jQuery.Validate 使用笔记(jQuery Validation范例 )
Jun 25 Javascript
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
Oct 20 Javascript
在JS中最常看到切最容易迷惑的语法(转)
Oct 29 Javascript
Jquery实现弹出层分享微博插件具备动画效果
Apr 03 Javascript
如何使用jQuery来处理图片坏链具体实现步骤
May 02 Javascript
javascript实现类似百度分享功能的方法
Jul 27 Javascript
JavaScript 对象深入学习总结(经典)
Sep 29 Javascript
详解JavaScript基于面向对象之创建对象(1)
Dec 10 Javascript
JavaScript纯色二维码变成彩色二维码
Jul 23 Javascript
使用jQuery实现购物车结算功能
Aug 15 jQuery
js设计模式之单例模式原理与用法详解
Aug 15 Javascript
vue项目中api接口管理总结
Apr 20 #Javascript
通过jquery获取上传文件名称、类型和大小的实现代码
Apr 19 #jQuery
js Element Traversal规范中的元素遍历方法
Apr 19 #Javascript
关于vue中的ajax请求和axios包问题
Apr 19 #Javascript
详解vue 数据传递的方法
Apr 19 #Javascript
Vue 去除路径中的#号
Apr 19 #Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
Apr 19 #Javascript
You might like
一个用mysql_odbc和php写的serach数据库程序
2006/10/09 PHP
PHP合并数组+与array_merge的区别分析
2010/08/01 PHP
PHP中Cookie的使用详解(简单易懂)
2017/04/28 PHP
图片onload事件触发问题解决方法
2011/07/31 Javascript
js中继承的几种用法总结(apply,call,prototype)
2013/12/26 Javascript
深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例
2014/08/04 Javascript
javascript实现验证身份证号的有效性并提示
2015/04/30 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
基于Javascript实现二级联动菜单效果
2016/03/04 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
深入理解JavaScript中的块级作用域、私有变量与模块模式
2016/10/31 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
2016/12/26 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
javascript实现的图片预览功能
2017/03/25 Javascript
Vue.js实战之使用Vuex + axios发送请求详解
2017/04/04 Javascript
Angularjs Promise实例详解
2018/03/15 Javascript
详解JSON和JSONP劫持以及解决方法
2019/03/08 Javascript
vue中 this.$set的用法详解
2019/09/06 Javascript
Python lambda和Python def区别分析
2014/11/30 Python
python文件与目录操作实例详解
2016/02/22 Python
win与linux系统中python requests 安装
2016/12/04 Python
100行Python代码实现自动抢火车票(附源码)
2018/01/11 Python
django url到views参数传递的实例
2019/07/19 Python
Python实现TCP通信的示例代码
2019/09/09 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
2019/10/27 Python
详解python statistics模块及函数用法
2019/10/27 Python
python3读取csv文件任意行列代码实例
2020/01/13 Python
python更新数据库中某个字段的数据(方法详解)
2020/11/18 Python
纯html5+css3下拉导航菜单实现代码
2013/03/18 HTML / CSS
大学同学聚会邀请函
2014/01/19 职场文书
2014年教师教学工作总结
2014/11/08 职场文书
爱护公物主题班会
2015/08/17 职场文书
青年干部培训班学习心得体会
2016/01/06 职场文书
Nginx + consul + upsync 完成动态负载均衡的方法详解
2021/03/31 Servers
nginx实现动静分离的方法示例
2021/11/07 Servers
win10如何开启ahci模式?win10开启ahci模式详细操作教程
2022/07/23 数码科技