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操作ACCESS数据库(读增改删)的代码
May 14 Javascript
JavaScript的类型转换(字符转数字 数字转字符)
Aug 30 Javascript
用js来定义浏览器中一个左右浮动元素相对于页面主体宽度的位置的函数
Jan 21 Javascript
点击表单提交时出现jQuery没有权限的解决方法
Jul 23 Javascript
js的toUpperCase方法用法实例
Jan 27 Javascript
jquery+css实现的红色线条横向二级菜单效果
Aug 22 Javascript
jquery自适应布局的简单实例
May 28 Javascript
关于Vue.nextTick()的正确使用方法浅析
Aug 25 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
May 13 Javascript
微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
Oct 12 Javascript
通过npm或yarn自动生成vue组件的方法示例
Feb 12 Javascript
Vue中对iframe实现keep alive无刷新的方法
Jul 23 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
一个很方便的 XML 类!!原创的噢
2006/10/09 PHP
php获取远程文件内容的函数
2015/11/02 PHP
Yii使用Captcha验证码的方法
2015/12/28 PHP
CodeIgniter读写分离实现方法详解
2016/01/20 PHP
PHP7常量数组用法分析
2016/09/26 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
2019/10/30 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
JS支持带x身份证号码验证函数
2008/08/10 Javascript
javascript div 弹出可拖动窗口
2009/02/26 Javascript
checkbox 复选框不能为空
2009/07/11 Javascript
第一个JavaScript入门基础 document.write输出
2010/02/22 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
offsetHeight在OnLoad中获取为0的现象
2013/07/22 Javascript
JavaScript加强之自定义callback示例
2013/09/21 Javascript
JS Date函数整理方便使用
2013/10/23 Javascript
Bootstrap登陆注册页面开发教程
2016/07/12 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
手机注册发送验证码倒计时的简单实例
2017/11/15 Javascript
快速处理vue渲染前的显示问题
2018/03/05 Javascript
vue-router懒加载速度缓慢问题及解决方法
2018/11/25 Javascript
JS实现导航栏楼层特效
2020/01/01 Javascript
从零学python系列之新版本导入httplib模块报ImportError解决方案
2014/05/23 Python
python登录并爬取淘宝信息代码示例
2017/12/09 Python
python 中if else 语句的作用及示例代码
2018/03/05 Python
Python实现的远程文件自动打包并下载功能示例
2019/07/12 Python
django-初始配置(纯手写)详解
2019/07/30 Python
FC-Moto西班牙:摩托车手最大的购物场所之一
2019/04/11 全球购物
美国宠物护理专家:Revival Animal Health
2020/01/05 全球购物
SQL Server里面什么样的视图才能创建索引
2015/04/17 面试题
店长岗位职责
2013/11/21 职场文书
公司欠款证明
2015/06/24 职场文书
体育委员竞选稿
2015/11/21 职场文书
成功的商业计划书这样写才最靠谱
2019/07/12 职场文书
七个非常实用的Python工具包总结
2021/06/15 Python
Python一些基本的图像操作和处理总结
2021/06/23 Python