...
|
...
|
@@ -8,8 +8,6 @@ |
|
|
const _ = require('lodash');
|
|
|
const config = global.yoho.config;
|
|
|
const co = Promise.coroutine;
|
|
|
const cache = global.yoho.cache;
|
|
|
const log = global.yoho.logger;
|
|
|
const geetest = require('./geetest');
|
|
|
const captcha = require('./captcha');
|
|
|
const imgCheck = require('../models/imgcheck');
|
...
|
...
|
@@ -60,48 +58,25 @@ const check = (req, res, next) => { |
|
|
req.yoho.captchaShow = !_.get(req.app.locals.wap, 'close.loginValidation', false);
|
|
|
|
|
|
co(function* () {
|
|
|
// 如果是账号密码登录,那么需要检查是否登录失败过,登录失败过展示验证码
|
|
|
if (req.path === '/passport/login/auth') {
|
|
|
// 第一次登录要不要展示验证码:后台开关勾选,首次登录不需要展示
|
|
|
let firstLoginShowCaptcha = !_.get(req.app.locals.wap, 'close.firstLoginShowCaptcha', false);
|
|
|
|
|
|
log.info(`firstLoginShowCaptcha status is ${firstLoginShowCaptcha}`);
|
|
|
|
|
|
if (firstLoginShowCaptcha) {
|
|
|
req.yoho.captchaShow = true;
|
|
|
} else {
|
|
|
let hasErrorLog = yield cache.get(`loginErrorIp:${req.yoho.clientIp}`);
|
|
|
|
|
|
log.info(`Check clientip ${req.yoho.clientIp} status is ` + hasErrorLog);
|
|
|
res.locals.useGeetest = _.get(req.app.locals.wap, 'geetest.validation', false); // 使用极验证
|
|
|
if (res.locals.useGeetest) {
|
|
|
req.yoho.captchaShow = false;
|
|
|
} else {
|
|
|
let isNeedImgCheckApiData = yield req.ctx(imgCheck).isNeedImgCheck(req.sessionID);
|
|
|
|
|
|
if (hasErrorLog) {
|
|
|
req.yoho.captchaShow = true;
|
|
|
} else {
|
|
|
req.yoho.captchaShow = false;
|
|
|
}
|
|
|
req.yoho.captchaShow = true;
|
|
|
if (_.parseInt(_.get(isNeedImgCheckApiData, 'code')) === 200) {
|
|
|
req.yoho.captchaShow = _.get(isNeedImgCheckApiData, 'data');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return req.yoho.captchaShow;
|
|
|
})().catch(function() {
|
|
|
// memcache 不可用,展示验证码
|
|
|
req.yoho.captchaShow = true;
|
|
|
return req.yoho.captchaShow;
|
|
|
}).then(function() {
|
|
|
})().then(function() {
|
|
|
// 不是账号密码登录,直接根据配置总开关决定是否需要展示验证码
|
|
|
if (!req.yoho.captchaShow) {
|
|
|
return next();
|
|
|
}
|
|
|
|
|
|
// 使用极验证
|
|
|
let useGeetest = _.get(req.app.locals.wap, 'geetest.validation', false);
|
|
|
|
|
|
// 某次请求极验证调用注册失败,强制使用自有图形验证码
|
|
|
if (req.session.useYohoCaptcha) {
|
|
|
useGeetest = false;
|
|
|
}
|
|
|
|
|
|
return (useGeetest ? geetest : captcha).validate(req, res, next);
|
|
|
return (res.locals.useGeetest ? geetest : captcha).validate(req, res, next);
|
|
|
});
|
|
|
};
|
|
|
|
...
|
...
|
|