back.js 4.19 KB
/**
 * 找回密码
 * Created by yoho on 2016/6/12.
 */

'use strict';

const _ = require('lodash');

const library = '../../../library';
const helpers = require(`${library}/helpers`);

const service = require('../models/back-service');

/**
 * 通过邮箱找回密码
 */
module.exports.indexByEmail = (req, res) => {

    let data = {
        backUrl: helpers.urlFormat('signin.html'),
        headerText: '找回密码',
        isPassportPage: true,
        backEmail: true
    };

    res.render('back/by-email', Object.assign({
        module: 'passport',
        page: 'back',
        title: '找回密码-通过邮箱'
    }, data)
    );
};

/**
 * 发送验证码到邮箱
 */
module.exports.sendEmail = (req, res, next) => {
    let email = req.body.email || '';

    if (!helpers.verifyEmail(email)) {

        res.json({
            code: 400,
            message: '邮箱格式不正确,请重新输入',
            data: ''
        });

        return;
    }

    service.sendCodeToEmailAsync(email).then(result => {
        if (result.code === 200) {
            result.data = helpers.urlFormat('passport/back/success', {email: email});
        }

        res.json(result);
    }).catch(next);
};

/**
 * 重新发送邮箱验证码
 */
module.exports.resendEmail = (req, res) => {
    let email = req.params.email || '';

    service.sendCodeToEmailAsync(email).then(result => {
        if (_.isEmpty(result)) {
            return Promise.rejected('重发邮件失败');
        }

        res.json(result);
    }).catch(err => {
        res.json({
            code: 400,
            message: err
        });
    });
};

/**
 * 邮箱找回密码-成功
 */
module.exports.success = (req, res) => {
    let email = req.params.email || '';

    if (!helpers.verifyEmail(email)) {
        res.redirect(400);
    }

    let domain = email.split('@')[1];

    let emailUrl = `http://${domain === 'gmail.com' ? 'mail.google.com' : 'mail.'}${domain}`;

    res.render('email-success', {
        backUrl: helpers.urlFormat('emailback.html'),
        headerText: '找回密码',
        isPassportPage: true,
        backEmailSuccess: true,
        goEmail: emailUrl,
        resendUrl: helpers.urlFormat('passport/back/resendemail', {email: email}),
        title: '找回密码-通过邮箱'
    });
};


/**
 * 根据邮箱修改密码
 */
module.exports.success = (req, res) => {
    let pwd = req.body.password || '';

    let code = req.body.code || '';

    let data = {
        code: 200,
        data: helpers.urlFormat('signin.html')
    };

    service.modifyPasswordByEmailAsync(pwd, code).then(result => {
        if (result.includes('history.back')) {
            data.code = 400;
            data.message = '修改失败';
        }

        res.json(data);
    }).catch(() => {
        res.json(data);
    });
};

/**
 * 找回密码-通过手机号
 */
module.exports.indexByMobile = (req, res) => {
    service.getAreaDataAsync().then(result => {
        res.render('mobile', {
            backUrl: helpers.urlFormat('signin.html'),
            headerText: '找回密码',
            isPassportPage: true,
            backMobile: true,
            countrys: result,
            areaCode: '+86',
            title: '找回密码-通过手机号'
        });
    });
};

/**
 * 发送手机验证码
 */
module.exports.sendVerifyCodeBySMS = (req, res) => {
    let result = {
        code: 400,
        message: '密码只能使用数字、字母和半角标点符号,请重新输入',
        data: ''
    };

    let phoneNum = req.body.phoneNum || '';

    let areaCode = req.body.areaCode || '86';

    if (!helpers.verifyMobile(phoneNum)) {
        res.json(result);
    }

    service.sendCodeToMobileAsync(phoneNum, areaCode).then(data=> {
        if (_.isEmpty(data)) {
            return Promise.rejected('发送验证码出错');
        }

        if (data.code === 200) {
            result.data = helpers.urlFormat('passport/back/mobilecode', {
                phoneNum: phoneNum,
                areaCode: areaCode
            });

            res.json(result);
        } else {
            return Promise.rejected('发送验证码出错');
        }
    }).catch(err => {
        result.message = err;
        res.json(result);
    });

};