Authored by ccbikai(👎🏻🍜)

增加极验证

  1 +'use strict';
  2 +const _ = require('lodash');
1 const Geetest = require('geetest'); 3 const Geetest = require('geetest');
2 4
3 const captcha = new Geetest({ 5 const captcha = new Geetest({
@@ -21,6 +23,14 @@ const geetest = { @@ -21,6 +23,14 @@ const geetest = {
21 }).catch(next); 23 }).catch(next);
22 }, 24 },
23 validate(req, res, next) { 25 validate(req, res, next) {
  26 +
  27 + // 使用极验证
  28 + let useGeetest = _.get(req.app.locals.wap, 'geetest.validation', true);
  29 +
  30 + if (!useGeetest) {
  31 + return next();
  32 + }
  33 +
24 captcha.validate({ 34 captcha.validate({
25 challenge: 'xxx', 35 challenge: 'xxx',
26 validate: 'xxx', 36 validate: 'xxx',
@@ -29,9 +39,10 @@ const geetest = { @@ -29,9 +39,10 @@ const geetest = {
29 if (success) { 39 if (success) {
30 return next(); 40 return next();
31 } 41 }
32 - return res.send(403, {  
33 - code: 403,  
34 - message: 'captcha error' 42 + return res.send({
  43 + code: 400,
  44 + message: '验证码错误',
  45 + captchaShow: true
35 }); 46 });
36 }); 47 });
37 } 48 }
@@ -111,6 +111,7 @@ const local = { @@ -111,6 +111,7 @@ const local = {
111 res.render('login', { 111 res.render('login', {
112 width750: true, 112 width750: true,
113 loginIndex: true, // 模板中使用JS的标识 113 loginIndex: true, // 模板中使用JS的标识
  114 + useGeetest: _.get(req.app.locals.wap, 'geetest.validation', true), // 使用极验证
114 115
115 // captchaShow: _.get(req.session, 'login.errorCount') <= 0, 116 // captchaShow: _.get(req.session, 'login.errorCount') <= 0,
116 captchaShow: true, // 170306 因为暴力破解密码问题,要求每次都展示验证码 117 captchaShow: true, // 170306 因为暴力破解密码问题,要求每次都展示验证码
@@ -169,6 +170,7 @@ const local = { @@ -169,6 +170,7 @@ const local = {
169 // 返回的URL链接 170 // 返回的URL链接
170 backUrl: 'javascript:history.go(-1)', // eslint-disable-line 171 backUrl: 'javascript:history.go(-1)', // eslint-disable-line
171 loginInternational: true, // 模板中使用JS的标识 172 loginInternational: true, // 模板中使用JS的标识
  173 + useGeetest: _.get(req.app.locals.wap, 'geetest.validation', true), // 使用极验证
172 174
173 // captchaShow: _.get(req.session, 'login.errorCount') <= 0, 175 // captchaShow: _.get(req.session, 'login.errorCount') <= 0,
174 captchaShow: true, // 170306 因为暴力破解密码问题,要求每次都展示验证码 176 captchaShow: true, // 170306 因为暴力破解密码问题,要求每次都展示验证码
@@ -192,7 +194,11 @@ const local = { @@ -192,7 +194,11 @@ const local = {
192 _.set(req.session, 'login.errorCount', 3); 194 _.set(req.session, 'login.errorCount', 3);
193 } 195 }
194 196
195 - if (count <= 0) { 197 + // 使用极验证
  198 + let useGeetest = _.get(req.app.locals.wap, 'geetest.validation', true);
  199 +
  200 + // 有货自有验证码
  201 + if (count <= 0 && !useGeetest) {
196 let captchaInput = req.body.captcha; 202 let captchaInput = req.body.captcha;
197 let captchaCode = _.get(req.session, 'captcha'); 203 let captchaCode = _.get(req.session, 'captcha');
198 let testCode = req.body.yohobuy; 204 let testCode = req.body.yohobuy;
@@ -44,7 +44,7 @@ router.get('/passport/login', login.common.beforeLogin, login.local.loginPage); @@ -44,7 +44,7 @@ router.get('/passport/login', login.common.beforeLogin, login.local.loginPage);
44 router.get('/passport/international', login.common.beforeLogin, login.local.international); 44 router.get('/passport/international', login.common.beforeLogin, login.local.international);
45 45
46 // 本地登录 46 // 本地登录
47 -router.post('/passport/login/auth', login.local.login); 47 +router.post('/passport/login/auth', geetest.validate, login.local.login);
48 48
49 // SMS 短信 49 // SMS 短信
50 router.use('/passport/sms_login', login.common.beforeLogin, smsLogin.beforeIn); 50 router.use('/passport/sms_login', login.common.beforeLogin, smsLogin.beforeIn);
@@ -9,8 +9,8 @@ @@ -9,8 +9,8 @@
9 <div class="input-container row has-eye"> 9 <div class="input-container row has-eye">
10 <input id="pwd" class="pwd input" type="password" placeholder="密码"> 10 <input id="pwd" class="pwd input" type="password" placeholder="密码">
11 </div> 11 </div>
12 - <div id="js-img-check" {{#captchaShow }}data-init{{/captchaShow}}></div> 12 + <div data-geetest="{{useGeetest}}" id="js-img-check" {{#captchaShow }}data-init{{/captchaShow}}></div>
13 13
14 <span id="btn-login" class="btn btn-login disble row">登录</span> 14 <span id="btn-login" class="btn btn-login disble row">登录</span>
15 </div> 15 </div>
16 -</div>  
  16 +</div>
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 <div class="input-container row has-eye"> 8 <div class="input-container row has-eye">
9 <input id="pwd" class="pwd input" type="password" placeholder="密码"> 9 <input id="pwd" class="pwd input" type="password" placeholder="密码">
10 </div> 10 </div>
11 - <div id="js-img-check" {{#captchaShow }}data-init{{/captchaShow}}></div> 11 + <div data-geetest="{{useGeetest}}" id="js-img-check" {{#captchaShow }}data-init{{/captchaShow}}></div>
12 <span id="btn-login" class="btn btn-login disable">登录</span> 12 <span id="btn-login" class="btn btn-login disable">登录</span>
13 <p class="op-container"> 13 <p class="op-container">
14 <a class="op-item internat" href={{internationalUrl}}>海外手机</a> 14 <a class="op-item internat" href={{internationalUrl}}>海外手机</a>
@@ -23,12 +23,12 @@ @@ -23,12 +23,12 @@
23 <a class="alipay" href={{aliLoginUrl}}></a> 23 <a class="alipay" href={{aliLoginUrl}}></a>
24 </div> 24 </div>
25 </div> 25 </div>
26 - 26 +
27 <div class="login-tip"> 27 <div class="login-tip">
28 <div class="info-icon"></div> 28 <div class="info-icon"></div>
29 Yoho!Family账号可登录Yoho!Buy有货 29 Yoho!Family账号可登录Yoho!Buy有货
30 </div> 30 </div>
31 - 31 +
32 <div id="retrive-pwd-mask" class="mask"></div> 32 <div id="retrive-pwd-mask" class="mask"></div>
33 <ul id="retrive-pwd-ways" class="retrive-pwd-ways"> 33 <ul id="retrive-pwd-ways" class="retrive-pwd-ways">
34 <li> 34 <li>