back.js 6.66 KB
/**
 * 找回密码
 * Created by Tao.Huang on 2016/6/12.
 */

'use strict';

const _ = require('lodash');

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

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

const SIGN_IN_URL = helpers.urlFormat('signin.html');

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

    let data = {
        backUrl: SIGN_IN_URL,
        headerText: '找回密码',
        isPassportPage: true,
        backEmail: true
    };

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

/**
 * 发送验证码到邮箱
 */
module.exports.sendCodeToEmailAPI = (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.resendCodeToEmailAPI = (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.backSuccessPageByEmail = (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('back/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.changePasswordByEmailAPI = (req, res) => {
    let pwd = req.body.password || '';

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

    let data = {
        code: 200,
        data: SIGN_IN_URL
    };

    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.indexPageByMobile = (req, res) => {
    service.getAreaDataAsync().then(result => {
        res.render('mobile', {
            backUrl: SIGN_IN_URL,
            headerText: '找回密码',
            isPassportPage: true,
            backMobile: true,
            countrys: result,
            areaCode: '+86',
            title: '找回密码-通过手机号'
        });
    });
};

/**
 * 发送手机验证码
 */
module.exports.sendCodeToMobileAPI = (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);
        return;
    }

    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);
    });

};

/**
 * 校验验证码页面
 */
module.exports.VerifyCodePageByMobile = (req, res) => {
    let phoneNum = req.params.phoneNum || '';

    let areaCode = `+${(req.params.areaCode || '86')}`;

    res.render('mobile-code', {
        backUrl: helpers.urlFormat('phoneback.html'),
        headerText: '找回密码',
        isPassportPage: true,
        backCode: true,
        areaCode: areaCode,
        phoneNum: phoneNum
    });
};

/**
 * 校验手机验证码
 */
module.exports.verifyCodeByMobileAPI = (req, res) => {
    let phoneNum = req.body.phoneNum || '';

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

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

    service.validateMobileCodeAsync(phoneNum, code, areaCode)
        .then(result => {
            if (result.code === 200) {
                result.data = helpers.urlFormat('passport/back/backcode', {
                    phoneNum: phoneNum,
                    token: result.data.token,
                    areaCode: areaCode
                });
            }

            res.json(result);
        }).catch(() => res.json({code: 400, message: '验证码失购'}));
};

/**
 * 找回密码页面,设置新密码页面-手机
 */
module.exports.forgotPasswordPageByMobile = (req, res) => {
    let phoneNum = req.params.phoneNum || '';

    let token = req.params.token || '';

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

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

    if (!token || (!helpers.verifyMobile(phoneNum) && !code)) {
        res.redirect(400);
        return;
    }

    res.render('new-password', {
        backUrl: SIGN_IN_URL,
        headerText: '找回密码',
        isPassportPage: true,
        backNewPwd: true,
        phoneNum: phoneNum,
        token: token,
        areaCode: areaCode,
        code: code,
        title: '找回密码-输入新密码'
    });
};

/**
 * 根据手机验证码修改密码
 */
module.exports.changePasswordByMobileAPI = (req, res) => {
    let phoneNum = req.body.phoneNum || '';

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

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

    let newPwd = req.body.password || '';

    service.modifyPasswordByMobileAsync(phoneNum, token, newPwd, areaCode)
        .then(result => {
            if (result.code === 200) {
                result.data = SIGN_IN_URL;
            }

            res.json(result);
        }).catch(() => res.json({code: 400, message: '修改密码失败'}));
};