Authored by htoooth

add verify

... ... @@ -10,20 +10,20 @@ const service = require('../models/back-service');
const passportHelper = require('../models/passport-helper');
const _ = require('lodash');
//helpers.urlFormat = (url, qs) => {
// let localhost = 'http://localhost:6002';
//
// if (_.isEmpty(qs)) {
// return localhost + url;
// }
//
// const queryString = require('queryString');
//
// let str = queryString.stringify(qs);
//
// return localhost + url + '?' + str;
//
//};
helpers.urlFormat = (url, qs) => {
let localhost = 'http://localhost:6002';
if (_.isEmpty(qs)) {
return localhost + url;
}
const queryString = require('queryString');
let str = queryString.stringify(qs);
return localhost + url + '?' + str;
};
/**
* 找回密码主页面
... ... @@ -93,11 +93,11 @@ const sendCodePage = (req, res, next) => {
service.sendCodeToUserAsync(inputInfo.type, inputInfo.phone, inputInfo.area)
.then(result => {
if (result.code && result.code === 200) {
return next();
} else {
if (!(result.code && result.code === 200)) {
return res.redirect(helpers.urlFormat('/passport/back/index'));
}
return next();
})
.catch(next);
};
... ... @@ -142,24 +142,23 @@ const validateMobileAPI = (req, res, next) => {
if (!passportHelper.validator.isAreaMobile(passportHelper.makeAreaMobile(area, mobile))) {
return res.json(ERR);
} else {
return next();
}
next();
};
const validateEmailInSession = (req, res, next) => {
let email = req.session.email || '';
if (!email) {
res.redirect(helpers.urlFormat('/passport/back/index'));
return res.redirect(helpers.urlFormat('/passport/back/index'));
}
let isp = email.split('@')[1];
const mapperEmailISP = {
'yoho.cn': 'http://smail.yoho.cn'
};
let isp = email.split('@')[1];
req.body.emailUrl = mapperEmailISP[isp] || `http://mail.${isp}`;
next();
};
... ... @@ -187,8 +186,7 @@ const validateCodeByEmailPage = (req, res, next) => {
let code = req.query.code || '';
if (!_.isEmpty(req.mobileAuth)) {
next();
return;
return next();
}
service.checkEmailCodeAsync(code)
... ... @@ -253,12 +251,12 @@ const verifyCodeByMobilePage = (req, res, next) => {
const checkSuccessStatusPage = (req, res, next) => {
let successType = req.session.successType || '';
if (successType) {
delete req.session.successType;
next();
} else {
res.redirect(helpers.urlFormat('/passport/back/index'));
if (!successType) {
return res.redirect(helpers.urlFormat('/passport/back/index'));
}
delete req.session.successType;
next();
};
const resetPwdSuccessPage = (req, res, next) => {
... ... @@ -282,7 +280,7 @@ const verifyCodeByMobileAPI = (req, res) => {
let mobile = req.param('mobile', '');
let area = req.param('area', '86');
let mobileCode = req.param('code', '');
const session = req.session;
//const session = req.session;
const ERR = {
code : 400,
... ... @@ -304,7 +302,7 @@ const verifyCodeByMobileAPI = (req, res) => {
};
const validateExistCodePage = (req, res, next) => {
let code = req.param('code', '');
let code = req.query.code || req.body.code;
if (!code) {
return res.redirect(helpers.urlFormat('/passport/back/index'));
... ... @@ -314,24 +312,25 @@ const validateExistCodePage = (req, res, next) => {
};
const validateCodeByMobilePage = (req, res, next) => {
let code = req.param('code', '');
let mobile = req.param('mobile', '');
let code = req.query.code || req.body.code;
let mobile = req.query.mobile || req.body.mobile;
let area = req.query.area || req.body.area;
let token = req.query.token || req.body.token;
let createdAt = req.query.createdAt || req.body.createdAt;
if (!mobile) {
req.mobileAuth = {};
next();
return;
return next();
}
let data = {
mobile : mobile,
area : req.param('area', ''),
token : req.param('token', ''),
create_time: req.param('create_time', 0)
mobile : mobile,
area : area,
token : token,
createdAt: createdAt
};
code = new Buffer(code, 'base64').toString();
req.mobileAuth = service.authRequest(data, code);
next();
... ... @@ -340,11 +339,11 @@ const validateCodeByMobilePage = (req, res, next) => {
const validatePwdPage = (req, res, next) => {
let pwd = req.body.pwd || '';
if (helpers.isPassword(pwd)) {
next();
} else {
res.redirect(helpers.urlFormat('/passport/back/index'));
if (!passportHelper.validator.isPassword(pwd)) {
return res.redirect(helpers.urlFormat('/passport/back/index'));
}
next();
};
const updatePwdAPI = (req, res, next) => {
... ... @@ -365,20 +364,15 @@ const updatePwdAPI = (req, res, next) => {
};
const validateMobileInSession = (req, res, next) => {
console.log(req.session.mobile);
console.log(req.session.area);
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) {
return next();
} else {
if (!(req.body.mobile && req.body.verifyCode)) {
return res.redirect(helpers.urlFormat('/passport/back/index'));
}
next();
};
module.exports = {
... ...
... ... @@ -29,7 +29,6 @@ const requiredPage = (req, res, next) => {
}
};
module.exports = {
requiredAPI,
requiredPage
... ...
... ... @@ -120,15 +120,15 @@ const verifyCodyByMobileAsync = (area, mobile, mobileCode) => {
}
let data = {
mobile: mobile,
area: area,
token: result.data.token,
create_time: moment().unix()
mobile : mobile,
area : area,
token : result.data.token,
createdAt: moment().unix()
};
data.code = new Buffer(backHelper.makeToken(data)).toString('base64');
console.log(data.code);
console.log('encode', data.code);
return {
code: 200,
... ... @@ -145,7 +145,7 @@ const authRequest = (data, token) => {
}
let existTime = moment.duration(1, 'hours').seconds();
let isExpired = (moment().unix() - data.create_time) > existTime;
let isExpired = (moment().unix() - data.createdAt) > existTime;
if (isExpired) {
return {};
... ... @@ -164,6 +164,8 @@ const updatePwdAsync = (emailToken, mobileToken, newPassword) => {
return ERR;
}
console.log(mobileToken);
let mobile = mobileToken.mobile;
let area = mobileToken.area;
let token = mobileToken.token;
... ...
... ... @@ -230,12 +230,23 @@ const makeAreaMobile = (area, mobile) => {
return `${area}-${mobile}`;
};
const isPassword = pwd => {
if (!pwd) {
return false;
}
let pwdRegexp = /^([a-zA-Z0-9\-\+_!@\#$%\^&\*\(\)\:\;\.=\[\]\\\',\?]){6,20}$/;
return pwdRegexp.test(_.trim(pwd));
};
module.exports = {
validator: {
verifyPassword,
verifyMobile,
isAreaMobile,
verifyEmail
verifyEmail,
isPassword
},
makeAreaMobile,
getCountry,
... ...
... ... @@ -10,8 +10,8 @@ const express = require('express');
const cRoot = './controllers';
const login = require(cRoot + '/login');
const Captcha = require(cRoot + '/captcha');
const Back = require(cRoot + '/back');
const captcha = require(cRoot + '/captcha');
const back = require(cRoot + '/back');
const router = express.Router(); // eslint-disable-line
... ... @@ -22,37 +22,38 @@ router.get('/login/wechat/callback', login.wechat.callback);
* 找回密码首页信息
*/
// 找回密码首页
router.get('/back/index', Back.index);
router.get('/back/index', back.index);
// 实时验证输入是否正确
router.post('/back/authcode',
Captcha.requiredAPI,
Back.validateInputAPI,
Back.getUserInfoAPI);
// captcha.requiredAPI,
back.validateInputAPI,
back.getUserInfoAPI);
// 提交按钮邮件API
router.post('/back/email',
// Captcha.requiredPage,
Back.validateUserPage,
Back.sendCodePage,
Back.saveInSession);
back.validateUserPage,
back.sendCodePage,
back.saveInSession);
// 提交按钮手机API
router.post('/back/mobile',
Captcha.requiredPage,
Back.validateUserPage,
Back.sendCodePage,
Back.saveInSession);
captcha.requiredPage,
back.validateUserPage,
back.sendCodePage,
back.saveInSession);
/**
* 邮件找回密码
*/
// 发送邮件成功页面
router.get('/back/sendEmail',
Back.validateEmailInSession,
Back.sendEmailPage);
back.validateEmailInSession,
back.sendEmailPage);
/**
* 短信找回密码
... ... @@ -62,42 +63,43 @@ router.get('/back/verification',
// Back.validateMobileInSession,
// Captcha.requiredPage,
Back.verifyCodeByMobilePage);
back.verifyCodeByMobilePage);
// 重新发送短信接口
router.post('/back/sendBackMobile',
// Captcha.requiredAPI,
Back.validateMobileAPI,
Back.sendBackMobileAPI);
back.validateMobileAPI,
back.sendBackMobileAPI);
// 验证手机验证码接口
router.post('/back/backMobile',
// Captcha.requiredAPI,
Back.verifyCodeByMobileAPI);
back.verifyCodeByMobileAPI);
/**
* 重置密码
*/
// 重置密码页面
router.get('/back/backcode',
Back.validateExistCodePage,
Back.validateCodeByMobilePage,
Back.validateCodeByEmailPage,
Back.resetPasswordPage);
back.validateExistCodePage,
back.validateCodeByMobilePage,
back.validateCodeByEmailPage,
back.resetPasswordPage);
// 重置密码接口
router.post('/back/update',
Back.validateExistCodePage,
Back.validateCodeByMobilePage,
Back.validatePwdPage,
Back.updatePwdAPI);
back.validateExistCodePage,
back.validateCodeByMobilePage,
// Back.validatePwdPage,
back.updatePwdAPI);
// 重置密码成功页面
router.get('/back/resetSuccess',
// Back.checkSuccessStatusPage,
Back.resetPwdSuccessPage);
back.resetPwdSuccessPage);
module.exports = router;
... ...
... ... @@ -325,7 +325,6 @@ exports.isPassword = (pwd) => {
return false;
}
// TODO
let pwdRegexp = /^([a-zA-Z0-9\-\+_!@\#$%\^&\*\(\)\:\;\.=\[\]\\\',\?]){6,20}$/;
return pwdRegexp.test(_.trim(pwd));
... ...
... ... @@ -41,6 +41,7 @@ $sc.click(function() {
$sc.val(seconds-- + '秒后可重新操作');
}
}, 1000);
} else {
$(this).addClass('error');
$errTip.removeClass('hide').text('发送失败');
... ...