| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | 'use strict';/** * 验证码 * * @author CaiAoLin * @date 2017/10/13 * @version */const Geetest = require('gt3-sdk');class Captcha {    /**     * 构造函数     *     * @param {Object} app - egg中的全局变量app(用于获取配置)     * @return {void}     */    constructor(app) {        this.captcha = new Geetest({            geetest_id: app.config.geetest.id,            geetest_key: app.config.geetest.key,        });    }    /**     * 验证码注册     *     * @param {Object} ctx - egg中的全局变量context     * @return {String} - 返回生成所需的json数据     */    async register(ctx) {        let response = {            success: 0,        };        try {            const data = await this.captcha.register(null);            ctx.session.fallback = !data.success;            response = data;        } catch (error) {            response.success = 0;            response.message = error;            JSON.stringify(response);        }        return response;    }    /**     * 验证码校验     *     * @param {Object} ctx - egg中的全局变量context     * @return {Boolean} - 返回是否校验成功     */    async validate(ctx) {        let result = false;        const challenge = ctx.request.body.geetest_challenge;        const validate = ctx.request.body.geetest_validate;        const seccode = ctx.request.body.geetest_seccode;        try {            if (challenge === '' || validate === '' || seccode === '') {                throw '参数错误';            }            const fallback = ctx.session.fallback;            result = await this.captcha.validate(fallback, {                geetest_challenge: challenge,                geetest_validate: validate,                geetest_seccode: seccode,            });        } catch (error) {            result = false;        }        return result;    }}module.exports = Captcha;
 |