Authored by htoooth

add ok

... ... @@ -10,6 +10,7 @@ const helpers = require(`${library}/helpers`);
const service = require('../models/back-service');
const sessionService = require('../models/session-service');
const passportHelper = require('../models/passport-helper');
// 本地地址 localhost
helpers.urlFormat = helpers.fakeUrlFormat;
... ... @@ -30,17 +31,19 @@ module.exports.indexPage = (req, res, next) => {
/**
* 校验用户输入信息,是否是已经注册的用户
*/
module.exports.validateUserInputAPI = (req, res, next) => {
module.exports.validateInputAPI = (req, res, next) => {
let userInput = req.body.phoneNum || '';
let areaCode = req.body.area || '86';
let areaCode = (req.body.area || '86').replace('+', '');
service.validateEmailOrMobileAsync(userInput, areaCode)
.then(result => {
req.inputInfo = result;
console.log(result);
next();
})
.catch(err => {
console.log(err);
res.json({
code: 400,
message: err
... ... @@ -48,6 +51,26 @@ module.exports.validateUserInputAPI = (req, res, next) => {
});
};
/**
* 校验用户输入信息,是否是已经注册的用户
*/
module.exports.validateInputPage = (req, res, next) => {
let userInput = req.body.phoneNum || '';
let areaCode = (req.body.area || '86').replace('+', '');
console.log(userInput, areaCode);
service.validateEmailOrMobileAsync(userInput, areaCode)
.then(result => {
req.inputInfo = result;
next();
})
.catch(()=> {
res.redirect('/passport/back/index.html');
});
};
module.exports.getUserInfoAPI = (req, res, next) => {
let inputInfo = req.inputInfo;
... ... @@ -57,55 +80,100 @@ module.exports.getUserInfoAPI = (req, res, next) => {
}).catch(next);
};
module.exports.sendCodeAPI = (req, res, next) => {
module.exports.sendCodePage = (req, res, next) => {
let inputInfo = req.inputInfo;
service.sendCodeToUserAsync(inputInfo.type, inputInfo.mobile, inputInfo.area).then(result => {
switch (inputInfo.type) {
case 'email':
{
res.redirect('/passport/back/sendEmail.html');
break;
}
case 'mobile':
{
res.redirect('/passport/back/verification.html');
break;
}
default:
{
res.redirect('/passport/back/index.html');
}
service.sendCodeToUserAsync(inputInfo.type, inputInfo.phone, inputInfo.area).then(result => {
if (_.isEmpty(result)) {
res.redirect('/passport/back/index.html');
} else {
next();
}
}).catch(next);
};
module.exports.sendBackMobileAPI = (req, res, next) => {
let mobile = req.param('mobile', '');
}).catch(() => {
res.redirect('/passport/back/index.html');
});
};
let area = req.param('area', '86');
module.exports.saveInSession = (req, res) => {
switch (req.inputInfo.type) {
case 'email':
{
req.session.email = req.inputInfo.phone;
res.redirect('/passport/back/sendEmail.html');
break;
}
case 'mobile':
{
req.session.mobile = req.inputInfo.phone;
req.session.area = req.inputInfo.area;
res.redirect('/passport/back/verification.html');
break;
}
default:
{
res.redirect('/passport/back/index.html');
}
}
};
module.exports.sendBackMobileAPI = (req, res, next) => {
service.sendCodeToMobileAsync(area, mobile)
.then(result => {
res.json(result);
}).catch(next);
};
module.exports.validateMobileAPI = (req, res, next) => {
let mobile = req.body.mobile || '';
let area = req.body.area || '86';
const ERR = {code: 400, message: '验证失败'};
if (!helpers.verifyAreaMobile(helpers.makeAreaMobile(area, mobile))) {
res.json(ERR);
} else {
next();
}
};
module.exports.validateEmailInSession = (req, res, next) => {
let email = req.session.email || '';
if (!email) {
res.redirect('/passport/back/index.html');
}
const mapperEmailISP = {
'yoho.cn': 'http://smail.yoho.cn'
};
let isp = email.split('@')[1];
req.body.emailUrl = mapperEmailISP[isp] || `http://mail.${isp}`;
next();
};
module.exports.sendEmailPage = (req, res, next) => {
service.getSendEmailPageDataAsync()
passportHelper.getLeftBannerAsync()
.then(result => {
res.render('back/send-email', Object.assign({
module: 'passport',
page: 'back-send-email-ok',
title: "邮件发送成功"
}, result
));
module: 'passport',
page: 'back-send-email-ok',
title: "邮件发送成功"
}, {
email: req.body.emailUrl
}, {
coverHref: result.url,
coverImg: result.img
}));
}).catch(next);
};
module.exports.checkCodePage = (req, res, next) => {
let code = req.param('code', '');
module.exports.verifyCodeByEmailPage = (req, res, next) => {
let code = req.query.code || '';
service.checkEmailCodeAsync(code)
.then(result => {
... ... @@ -118,17 +186,22 @@ module.exports.checkCodePage = (req, res, next) => {
};
module.exports.resetPasswordPage = (req, res, next) => {
let code = res.query.code || '';
let code = req.query.code || '';
service.getLeftBannerAsync()
passportHelper.getLeftBannerAsync()
.then(result => {
res.render('back/reset-pwd', Object.assign({
module: 'passport',
page: 'back-reset-pwd',
title:'重新设置密码'
title: '重新设置密码'
}, {
code: code
}, result))
}, {
resetPwd: {
coverHref: result.url,
coverImg: result.img
}
}))
}).catch(next);
};
... ... @@ -137,19 +210,20 @@ module.exports.resetPasswordPage = (req, res, next) => {
*/
module.exports.verifyCodeByMobilePage = (req, res, next) => {
service.getVerifyCodeByMobilePageDataAsync()
passportHelper.getLeftBannerAsync()
.then(result => {
res.render('back/verification', Object.assign({
module: 'passport',
page: 'back-verify-mobile-code',
title: '手机验证'
}, {
mobile: req.body.mobile,
area: req.body.area,
verifyCode: req.body.verifyCode
}, {
verification: {
coverHref: result.url,
coverImg: result.img,
mobile: result.mobile,
area: result.area,
verifyCode: result.verifyCode
coverImg: result.img
}
}));
}).catch(next);
... ... @@ -160,10 +234,10 @@ module.exports.verifyCodeByMobileAPI = (req, res, next) => {
};
module.exports.checkSuccessStatusPage = (req, res, next) => {
let successType = sessionService.get('successType', '');
let successType = req.session.successType || '';
if (successType) {
sessionService.set('successType', '');
delete req.session.successType;
next();
} else {
res.redirect('/passport/back/index.html');
... ... @@ -171,17 +245,22 @@ module.exports.checkSuccessStatusPage = (req, res, next) => {
};
module.exports.resetPwdSuccessPage = (req, res, next) => {
service.getLeftBannerAsync()
passportHelper.getLeftBannerAsync()
.then(result => {
res.render('back/email-reset-success', Object.assign({
res.render('back/reset-success', Object.assign({
module: 'passport',
page: 'back-reset-success',
page: 'back-index',
title: '重置密码成功'
}, result))
}, {
resetSuccess: {
coverHref: result.url,
coverImg: result.img
}
}))
}).catch(next);
};
module.exports.verifyCodyByMobileAPI = (req, res, next) => {
module.exports.verifyCodeByMobileAPI = (req, res, next) => {
let mobile = req.param('mobile', '');
... ... @@ -210,18 +289,31 @@ module.exports.tokenCheckPage = (req, res, next) => {
};
module.exports.validationPwdPage = (req, res, next) => {
let pwd = req.param('pwd', '');
let pwd = req.body.pwd || '';
if (helpers.verifyPassword(pwd)) {
res.redirect('/passport/back/index.html');
} else {
if (helpers.isPassword(pwd)) {
next();
} else {
res.redirect('/passport/back/index.html');
}
};
module.exports.updatePwdPage = (req, res, next) => {
let code = req.param('code', '');
let code = req.body.code || '';
let auth = req.authInfo;
};
module.exports.validateMobileInSession = (req, res, next) => {
req.body.mobile = req.session.mobile || "";
req.body.verifyCode = req.session.verifyCode || "";
req.body.area = req.session.area || "";
if (req.body.mobile && req.body.verifyCode) {
next()
} else {
res.redirect('/passport/back/index.html');
}
};
... ...
... ... @@ -10,7 +10,7 @@ const sessionService = require('../models/session-service');
const captcha = require('../models/captcha-service')(sessionService);
const helpers = require(library + '/helpers');
exports.checkAPI = (req, res, next) => {
exports.validateAPI = (req, res, next) => {
let captchaToken = req.body.verifyCode || '';
captcha.findByContentAsync(captchaToken)
... ... @@ -26,7 +26,7 @@ exports.checkAPI = (req, res, next) => {
});
};
exports.checkPage = (req, res, next) => {
exports.validatePage = (req, res, next) => {
let captchaToken = req.body.verifyCode || '';
captcha.findByContentAsync(captchaToken)
... ...
... ... @@ -12,7 +12,6 @@ const _ = require('lodash');
const moment = require('moment');
const userService = require('./user-service');
const sessionService = require('./session-service');
const passportHelper = require('./passport-helper');
const BACK_LEFT_BANNER_CODE = '3bbaf502c447a2ddad60879042e286d8'; //找回密码左边的banner
... ... @@ -22,7 +21,6 @@ module.exports.validateEmailOrMobileAsync = (userInput, areaCode) => {
let result = {type: 'email', area: '', phone: ''};
if (helpers.verifyEmail(userInput)) {
result.type = 'email';
result.area = '';
result.phone = userInput;
... ... @@ -108,12 +106,6 @@ module.exports.sendCodeToUserAsync = (type, mobile, areaCode) => {
* 发送找回手机号短信
*/
module.exports.sendCodeToMobileAsync = (areaCode, mobile) => {
const ERR = {code: 400, message: '验证失败'};
if (!helpers.verifyAreaMobile(helpers.makeAreaMobile(areaCode, mobile))) {
return ERR;
}
return api.sendCodeToMobileAsync(mobile, areaCode);
};
... ... @@ -143,7 +135,14 @@ module.exports.indexPageDataAsync = () => {
};
module.exports.getVerifyCodeByMobilePageDataAsync = () => {
return co(function * () {
return {
verification: {
coverHref: '',
coverImg: ''
}
}
})();
};
module.exports.getSendEmailPageDataAsync = () => {
... ...
... ... @@ -5,7 +5,6 @@
'use strict';
const Cache = require(library + '/cache');
const helpers = require(library + '/helpers');
const Promise = require('bluebird');
const co = Promise.coroutine;
... ...
... ... @@ -15,3 +15,5 @@ module.exports.findCaptchaByTokenAsync = (token) => {
}
})();
};
... ...
... ... @@ -25,34 +25,37 @@ router.get('/login/wechat/callback', login.wechat.callback);
router.get('/back/index.html', Back.indexPage);
// 实时验证输入是否正确
router.post('/back/authcode', Captcha.checkAPI, Back.validateUserInputAPI, Back.getUserInfoAPI);
router.post('/back/authcode', Captcha.validateAPI, Back.validateInputAPI, Back.getUserInfoAPI);
// 提交按钮确定
router.post('/back/mobile', Captcha.checkPage, Back.validateUserInputAPI, Back.sendCodeAPI);
// 提交按钮邮件API
router.post('/back/email', Captcha.validatePage, Back.validateInputPage, Back.sendCodePage, Back.saveInSession);
// 提交按钮手机API
router.post('/back/mobile', Captcha.validatePage, Back.validateInputPage, Back.sendCodePage, Back.saveInSession);
/**
* 邮件找回密码
*/
// 发送邮件成功页面
router.get('/back/sendEmail.html', Back.sendEmailPage);
router.get('/back/sendEmail.html', Back.validateEmailInSession, Back.sendEmailPage);
/**
* 短信找回密码
*/
// 验证手机短信页面
router.get('/back/verification.html', Back.verifyCodeByMobilePage);
router.get('/back/verification.html', Back.validateMobileInSession, Captcha.validatePage, Back.verifyCodeByMobilePage);
// 重新发送短信接口
router.post('/back/sendBackMobile', Captcha.checkAPI, Back.sendBackMobileAPI);
router.post('/back/sendBackMobile', Captcha.validateAPI, Back.validateMobileAPI, Back.sendBackMobileAPI);
// 验证手机验证码接口
router.post('/back/backMobile', Captcha.checkAPI, Back.verifyCodyByMobileAPI);
router.post('/back/backMobile', Captcha.validateAPI, Back.verifyCodeByMobileAPI);
/**
* 重置密码
*/
// 重置密码页面
router.get('/back/backcode', Back.tokenCheckPage, Back.checkCodePage, Back.resetPasswordPage);
router.get('/back/backcode', Back.tokenCheckPage, Back.verifyCodeByEmailPage, Back.resetPasswordPage);
// 重置密码接口
router.post('/back/update', Back.tokenCheckPage, Back.validationPwdPage, Back.updatePwdPage);
... ...
... ... @@ -9,7 +9,6 @@
</div>
{{/ resetSuccess}}
</div>
{{> layout/footer}}
<script type="text/javascript">
(function() {
var count = 5,
... ...
... ... @@ -319,3 +319,14 @@ exports.makeAreaMobile = (area, mobile) => {
return `${area}-${mobile}`;
};
exports.isPassword = (pwd) => {
if(!pwd){
return false;
}
// TODO
let pwdRegexp = /^([a-zA-Z0-9\-\+_!@\#$%\^&\*\(\)\:\;\.=\[\]\\\',\?]){6,20}$/;
return pwdRegexp.test(_.trim(pwd));
};
... ...
... ... @@ -3,4 +3,3 @@
*/
require('./back/back');
require('./')
... ...
/**
* Created by TaoHuang on 2016/6/21.
*/
require('./back/reset');
... ...