Authored by htoooth

fix captcha

@@ -7,6 +7,8 @@ @@ -7,6 +7,8 @@
7 const captchaService = require('../models/captcha-service'); 7 const captchaService = require('../models/captcha-service');
8 const helpers = global.yoho.helpers; 8 const helpers = global.yoho.helpers;
9 const CAPTCHA = 'yoho4946abcdef#$%&!@'; 9 const CAPTCHA = 'yoho4946abcdef#$%&!@';
  10 +const request = require('request');
  11 +const uuid = require('uuid');
10 12
11 // 对比函数 13 // 对比函数
12 const _mustEqual = (req) => { 14 const _mustEqual = (req) => {
@@ -79,6 +81,22 @@ const generate = (req, res, next) => { @@ -79,6 +81,22 @@ const generate = (req, res, next) => {
79 }).catch(next); 81 }).catch(next);
80 }; 82 };
81 83
  84 +// 七牛验证码
  85 +const generateQiniu = (req, res, next) => {
  86 + captchaService.generateCaptcha().then((result) => {
  87 + req.session.captcha = result.data.text;
  88 + req.session.captchaCount = 0;
  89 +
  90 + let imageUrl = result.data.images + `/watermark/2/text/${uuid.v4()}/fontsize/120/dissolve/10`;
  91 +
  92 + res.type('png');
  93 + if (result.code === 200) {
  94 + request(imageUrl).pipe(res);
  95 + }
  96 +
  97 + }).catch(next);
  98 +};
  99 +
82 // 端到端检查 100 // 端到端检查
83 const checkAPI = (req, res) => { 101 const checkAPI = (req, res) => {
84 let count = req.session.captchaCount; 102 let count = req.session.captchaCount;
@@ -110,5 +128,6 @@ module.exports = { @@ -110,5 +128,6 @@ module.exports = {
110 requiredAPI, 128 requiredAPI,
111 requiredPage, 129 requiredPage,
112 generate, 130 generate,
113 - checkAPI 131 + checkAPI,
  132 + generateQiniu
114 }; 133 };
@@ -201,5 +201,6 @@ router.get('/passport/back/resetSuccess', @@ -201,5 +201,6 @@ router.get('/passport/back/resetSuccess',
201 201
202 router.get('/passport/imagesNode', captcha.generate); 202 router.get('/passport/imagesNode', captcha.generate);
203 router.post('/passport/captcha/img', captcha.checkAPI); 203 router.post('/passport/captcha/img', captcha.checkAPI);
  204 +router.get('/passport/images', captcha.generateQiniu);
204 205
205 module.exports = router; 206 module.exports = router;
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 var Captcha = function(container, options) { 5 var Captcha = function(container, options) {
6 var optionDefault = { 6 var optionDefault = {
7 template: require('hbs/common/captcha.hbs'), 7 template: require('hbs/common/captcha.hbs'),
8 - refreshURI: '/passport/imagesNode', 8 + refreshURI: '/passport/images',
9 checkURI: '/passport/captcha/img' 9 checkURI: '/passport/captcha/img'
10 }; 10 };
11 11
@@ -92,7 +92,7 @@ Captcha.prototype = { @@ -92,7 +92,7 @@ Captcha.prototype = {
92 */ 92 */
93 refresh: function() { 93 refresh: function() {
94 var self = this; 94 var self = this;
95 - var uri = this.refreshURI; 95 + var uri = this.refreshURI + '?t=' + $.now();
96 96
97 if (self.running) { 97 if (self.running) {
98 return $.Deferred().reject().promise(); // eslint-disable-line 98 return $.Deferred().reject().promise(); // eslint-disable-line
@@ -100,25 +100,15 @@ Captcha.prototype = { @@ -100,25 +100,15 @@ Captcha.prototype = {
100 100
101 self.running = true; 101 self.running = true;
102 102
103 - return $.get(uri)  
104 - .done(function(result) {  
105 - if (result.code !== 200) {  
106 - return self.showTip();  
107 - }  
108 -  
109 - var src = result.data.images; // eslint-disable-line 103 + self.render({
  104 + images: uri
  105 + });
110 106
111 - self.render({  
112 - images: src  
113 - }); 107 + self.hideTip();
  108 + self.refreshCb && self.refreshCb();
  109 + self.running = false;
114 110
115 - self.hideTip();  
116 -  
117 - self.refreshCb && self.refreshCb();  
118 - })  
119 - .always(function() {  
120 - self.running = false;  
121 - }); 111 + return $.Deferred().resolve().promise(); // eslint-disable-line
122 }, 112 },
123 113
124 onRefresh: function(cb) { 114 onRefresh: function(cb) {