...
|
...
|
@@ -3,6 +3,7 @@ |
|
|
*/
|
|
|
'use strict';
|
|
|
const _ = require('lodash');
|
|
|
const Promise = require('bluebird');
|
|
|
const passportHelper = require('../models/passport-helper');
|
|
|
const regService = require('../models/reg-service');
|
|
|
const userService = require('../models/user-service');
|
...
|
...
|
@@ -45,6 +46,22 @@ let checkMobileMiddleware = (req, res, next) => { |
|
|
};
|
|
|
|
|
|
/**
|
|
|
* 检查密码格式
|
|
|
*/
|
|
|
let checkPassword = (req, res, next) => {
|
|
|
/* 判断密码是否符合规则 */
|
|
|
let password = req.body.password;
|
|
|
|
|
|
if (!helpers.verifyPassword(password)) {
|
|
|
return res.json({
|
|
|
code: 400,
|
|
|
message: '密码不正确'
|
|
|
});
|
|
|
}
|
|
|
next();
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* 注册首页
|
|
|
*/
|
|
|
let index = (req, res, next) => {
|
...
|
...
|
@@ -128,57 +145,46 @@ let picCaptcha = (req, res) => { |
|
|
* 发送验证码
|
|
|
*/
|
|
|
let sendBindMsg = (req, res, next) => {
|
|
|
let data = {
|
|
|
code: 400,
|
|
|
message: '',
|
|
|
data: ''
|
|
|
};
|
|
|
|
|
|
let mobile = +req.body.mobile;
|
|
|
let area = +req.body.area;
|
|
|
Promise.coroutine(function*() {
|
|
|
let data = {
|
|
|
code: 400,
|
|
|
message: '',
|
|
|
data: ''
|
|
|
};
|
|
|
|
|
|
// 检查是否检查过
|
|
|
let regCheckKey = 'regCheckMobileNum_' + passportHelper.makeAreaMobile(area, mobile);
|
|
|
let mobile = +req.body.mobile;
|
|
|
let area = +req.body.area;
|
|
|
|
|
|
// 校验是否发送过多
|
|
|
let sendCodeKey = `send_code_${area}_${mobile}`;
|
|
|
// 检查是否检查过
|
|
|
let checkNum = yield cache.get(`regCheckMobileNum_${passportHelper.makeAreaMobile(area, mobile)}`);
|
|
|
|
|
|
cache.get(regCheckKey).then((checkNum) => {
|
|
|
if (!checkNum) {
|
|
|
data.message = '发送失败';
|
|
|
return res.json(data);
|
|
|
}
|
|
|
|
|
|
return cache.get(sendCodeKey).then((sendCodeTimes) => {
|
|
|
if (!sendCodeTimes) {
|
|
|
sendCodeTimes = 0;
|
|
|
} else {
|
|
|
sendCodeTimes = +sendCodeTimes;
|
|
|
}
|
|
|
// 校验是否发送过多
|
|
|
let sendCodeKey = `send_code_${area}_${mobile}`;
|
|
|
let sendCodeTimes = yield cache.get(sendCodeKey);
|
|
|
|
|
|
if (sendCodeTimes >= 10) {
|
|
|
data.message = '您已多次提交验证码,请尽快联系客服解决';
|
|
|
return res.json(data);
|
|
|
}
|
|
|
sendCodeTimes = +(sendCodeTimes || 0);
|
|
|
if (sendCodeTimes >= 5) {
|
|
|
data.message = sendCodeTimes >= 10 ? '您已多次提交验证码,请尽快联系客服解决' : '您收到的验证码短信已超过本日限定最多次数,请您耐心等待';
|
|
|
return res.json(data);
|
|
|
}
|
|
|
|
|
|
/* 向手机发送注册验证码 */
|
|
|
let result = yield regService.sendCodeToMobile(area, mobile);
|
|
|
|
|
|
if (sendCodeTimes >= 5) {
|
|
|
data.message = '您收到的验证码短信已超过本日限定最多次数,请您耐心等待';
|
|
|
return cache.set(sendCodeKey, sendCodeTimes + 1, 3600).then(() => {
|
|
|
if (result.code) {
|
|
|
return res.json(result);
|
|
|
} else {
|
|
|
data.message = '发送失败';
|
|
|
return res.json(data);
|
|
|
}
|
|
|
|
|
|
/* 向手机发送注册验证码 */
|
|
|
return regService.sendCodeToMobile(area, mobile).then((result) => {
|
|
|
return cache.set(sendCodeKey, sendCodeTimes + 1, 3600).then(() => {
|
|
|
if (result.code) {
|
|
|
return res.json(result);
|
|
|
} else {
|
|
|
data.message = '发送失败';
|
|
|
return res.json(data);
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
});
|
|
|
}).catch(next);
|
|
|
})().catch(next);
|
|
|
};
|
|
|
|
|
|
/**
|
...
|
...
|
@@ -208,36 +214,25 @@ let msgCaptcha = (req, res, next) => { |
|
|
* 注册接口
|
|
|
*/
|
|
|
let mobileRegister = (req, res, next) => {
|
|
|
let data = {
|
|
|
code: 400,
|
|
|
message: '',
|
|
|
data: ''
|
|
|
};
|
|
|
let area = +req.body.area;
|
|
|
let mobile = +req.body.mobile;
|
|
|
|
|
|
/* 判断是否是有效的注册方式,防注册机刷 */
|
|
|
let regExpireTime = req.session._REG_EXPIRE;
|
|
|
|
|
|
if (!regExpireTime || regExpireTime < Date.now()) {
|
|
|
data.message = '注册超时';
|
|
|
return res.json(data);
|
|
|
}
|
|
|
Promise.coroutine(function*() {
|
|
|
let data = {
|
|
|
code: 400,
|
|
|
message: '',
|
|
|
data: ''
|
|
|
};
|
|
|
|
|
|
/* 判断密码是否符合规则 */
|
|
|
let code = +req.body.code; // 短信验证码
|
|
|
let password = req.body.password;
|
|
|
/* 判断是否是有效的注册方式,防注册机刷 */
|
|
|
let regExpireTime = req.session._REG_EXPIRE;
|
|
|
|
|
|
if (!helpers.verifyPassword(password)) {
|
|
|
data.message = '密码不正确';
|
|
|
return res.json(data);
|
|
|
}
|
|
|
if (!regExpireTime || regExpireTime < Date.now()) {
|
|
|
data.message = '注册超时';
|
|
|
return res.json(data);
|
|
|
}
|
|
|
|
|
|
/* IP仅允许点击注册500次/时 */
|
|
|
let ip = req.ip;
|
|
|
let ipKey = 'ip_register_' + ip;
|
|
|
/* IP仅允许点击注册500次/时 */
|
|
|
let ipKey = 'ip_register_' + req.ip;
|
|
|
let ipTimes = yield cache.get(ipKey);
|
|
|
|
|
|
cache.get(ipKey).then((ipTimes) => {
|
|
|
if (!ipTimes) {
|
|
|
ipTimes = 0;
|
|
|
} else {
|
...
|
...
|
@@ -249,39 +244,40 @@ let mobileRegister = (req, res, next) => { |
|
|
return res.json(data);
|
|
|
}
|
|
|
|
|
|
return cache.set(ipKey, ipTimes + 1, 3600).then(() => {
|
|
|
/* 验证注册的标识码是否有效 */
|
|
|
return regService.validMobileCode(area, mobile, code).then((result) => {
|
|
|
if (!result.code || result.code !== 200) {
|
|
|
data.message = '验证码错误';
|
|
|
return res.json(data);
|
|
|
}
|
|
|
yield cache.set(ipKey, ipTimes + 1, 3600);
|
|
|
|
|
|
let area = +req.body.area;
|
|
|
let mobile = +req.body.mobile;
|
|
|
let code = +req.body.code; // 短信验证码
|
|
|
let password = req.body.password;
|
|
|
let result = yield regService.validMobileCode(area, mobile, code); // 验证注册的标识码是否有效
|
|
|
|
|
|
if (!result.code || result.code !== 200) {
|
|
|
data.message = '验证码错误';
|
|
|
return res.json(data);
|
|
|
}
|
|
|
|
|
|
/* 手机注册: 调用注册接口*/
|
|
|
let regResult = yield regService.regMobile(area, mobile, password, cookie.getShoppingKey(req));
|
|
|
|
|
|
if (!regResult.code || regResult.code !== 200) {
|
|
|
data.message = '注册失败';
|
|
|
return res.json(data);
|
|
|
}
|
|
|
|
|
|
let shoppingKey = cookie.getShoppingKey(req);
|
|
|
|
|
|
/* 手机注册: 调用注册接口*/
|
|
|
return regService.regMobile(area, mobile, password, shoppingKey).then((regResult) => {
|
|
|
if (!regResult.code || regResult.code !== 200) {
|
|
|
data.message = '注册失败';
|
|
|
return res.json(data);
|
|
|
}
|
|
|
|
|
|
return authHelper.syncUserSession(regResult.data.uid, req, res).then(() => {
|
|
|
return res.json({
|
|
|
code: 200,
|
|
|
message: '注册成功',
|
|
|
data: {
|
|
|
href: helpers.urlFormat('/passport/reg/success', {
|
|
|
next: cookie.getRefer(req, '/?go=1'),
|
|
|
goShoppingUrl: config.siteUrl
|
|
|
})
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
});
|
|
|
return authHelper.syncUserSession(regResult.data.uid, req, res).then(() => {
|
|
|
return res.json({
|
|
|
code: 200,
|
|
|
message: '注册成功',
|
|
|
data: {
|
|
|
href: helpers.urlFormat('/passport/reg/success', {
|
|
|
next: cookie.getRefer(req, '/?go=1'),
|
|
|
goShoppingUrl: config.siteUrl
|
|
|
})
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
}).catch(next);
|
|
|
})().catch(next);
|
|
|
};
|
|
|
|
|
|
let success = (req, res, next) => {
|
...
|
...
|
@@ -304,6 +300,7 @@ let success = (req, res, next) => { |
|
|
module.exports = {
|
|
|
checkCode,
|
|
|
checkMobileMiddleware,
|
|
|
checkPassword,
|
|
|
index,
|
|
|
success,
|
|
|
checkMobile,
|
...
|
...
|
|