validateCode.js 1.5 KB
/**
 * 验证码中间件
 * @author feng.chen<feng.chen@yoho.cn>
 * @date 2017/03/23
 */

'use strict';
const _ = require('lodash');
const config = global.yoho.config;
const geetest = require('./geetest');
const captcha = require('./captcha');

/**
 * 验证验证码
 */
const check = (req, res, next) => {
    let testCode = req.body.yohobuy;

    if (testCode === config.testCode) {
        return next();
    }

    // 170406 采用账号密码方式登录验证码可以配置关闭,默认开关是关闭状态,这时需要验证,开关开启,无需验证
    if (_.get(req.app.locals.wap, 'close.loginValidation', false) && req.path === '/passport/login/auth') {
        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);
};

/**
 * 加载验证码
 */
const load = (req, res, next) => {
    res.locals.useGeetest = !_.get(req.app.locals.wap, 'geetest.validation', false); // 使用极验证
    if (_.has(res, 'locals.loadJs')) {
        res.locals.loadJs.push({
            src: global.yoho.config.geetestJs
        });
    } else {
        res.locals.loadJs = [
            {
                src: global.yoho.config.geetestJs
            }
        ];
    }
    return next();
};

module.exports = {
    check,
    load
};