sms.js 2.29 KB
/**
 * 短信controller
 * @author: leo <qi.li@yoho.cn>
 * @date: 2017/06/26
 */
'use strict';
const _ = require('lodash');
const EventEmitter = require('events');
const SmsModel = require('../models/sms');

const smsController = {
    /**
     * 发送短信验证码
     * @param req
     * @param res
     * @returns {*|boolean}
     */
    sendCode(req, res) {
        const em = new EventEmitter();
        const area = (req.body.area || '').trim();
        const mobile = (req.body.mobile || '').trim();
        const inValid = [area, mobile].some(v => v === '');

        em.on('resolve', () => {
            _.set(req.session, 'smsLogin.area', area);
            _.set(req.session, 'smsLogin.mobile', mobile);

            req.ctx(SmsModel).sendSMS(mobile, area, 1)
                .then(result => {
                    if (result.code === 200) {
                        return res.json({
                            code: 200,
                            message: '验证码发送成功'
                        });
                    }

                    res.json({
                        code: 500,
                        message: '验证码发送失败'
                    });
                });
        });

        em.on('reject', error => {
            res.json(error);
        });


        if (!inValid) {
            em.emit('resolve');
            return;
        }

        em.emit('reject', {
            code: 400,
            message: '请填写手机号'
        });
    },

    /**
     * 验证码校验
     * @param req
     * @param res
     */
    checkCode(req, res, next) {
        const code = (req.body.code || '').trim();
        const area = _.get(req.session, 'smsLogin.area', '');
        const mobile = _.get(req.session, 'smsLogin.mobile', '');

        req.ctx(SmsModel).verifySMS(mobile, area, code, 1)
            .then(result => {
                if (result.code !== 200) {
                    res.json(result);
                    return;
                }

                if (result.data.is_pass !== 'Y') {
                    res.json({
                        code: 501,
                        message: '验证码与手机号不匹配'
                    });
                    return;
                }
                next();
            });
    }
};

module.exports = smsController;