|
|
const _ = require('lodash');
|
|
|
const url = require('url');
|
|
|
const RegService = require('../models/reg-service');
|
|
|
const utils = require(global.utils);
|
|
|
const sign = global.yoho.sign;
|
|
|
const co = require('bluebird').coroutine;
|
|
|
const cookie = global.yoho.cookie;
|
|
|
const AuthHelper = require('../models/auth-helper');
|
|
|
|
|
|
class Reg {
|
|
|
/**
|
|
|
* 注册页面
|
|
|
*/
|
|
|
regPage(req, res) {
|
|
|
if (req.user.uid) {
|
|
|
return res.redirect(req.get('refer') || '/');
|
|
|
}
|
|
|
|
|
|
// 判断是否 来自 个人中心
|
|
|
if (!_.get(req.session, 'phoneReg.isFromMy')) {
|
|
|
let referer = req.get('Referer') || '';
|
|
|
let urlObj = url.parse(referer, true, true);
|
|
|
|
|
|
referer = _.get(urlObj, 'query.refer', '');
|
|
|
|
|
|
urlObj = url.parse(referer, true, true);
|
|
|
urlObj.path === '/home' && _.set(req.session, 'phoneReg.isFromMy', '1');
|
|
|
}
|
|
|
|
|
|
// 设置注册有效时间30分钟, 防机器刷
|
|
|
// req.session.REG_EXPIRE = Date.now() + 1800000;
|
|
|
let refer = req.query.refer;
|
|
|
|
|
|
refer = utils.refererLimit(refer);
|
|
|
|
|
|
refer && res.cookie('refer', encodeURI(refer), {
|
|
|
domain: 'yohobuy.com'
|
|
|
});
|
|
|
|
|
|
// session init
|
|
|
_.set(req.session, 'phoneReg.step', 1);
|
|
|
|
|
|
if (req.session.captchaValidCount == null) { // eslint-disable-line
|
|
|
req.session.captchaValidCount = 5;
|
|
|
}
|
|
|
|
|
|
if (req.session.phoneReg.count == null) { // eslint-disable-line
|
|
|
req.session.phoneReg.count = 5;
|
|
|
}
|
|
|
res.render('reg/reg-new', {
|
|
|
module: 'passport',
|
|
|
page: 'reg-new',
|
...
|
...
|
@@ -9,6 +54,99 @@ class Reg { |
|
|
countrys: RegService.getAreaData() // 地区信息列表
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 注册请求处理
|
|
|
*/
|
|
|
register(req, res, next) {
|
|
|
let postResult = {
|
|
|
code: 400
|
|
|
};
|
|
|
|
|
|
let mobile = +req.body.phoneNum;
|
|
|
let area = +(req.body.areaCode || 86);
|
|
|
let password = req.body.password;
|
|
|
let smsCode = +req.body.smsCode;
|
|
|
let inviteCode = req.body.inviteCode || '';
|
|
|
let isFromMy = _.get(req.session, 'phoneReg.isFromMy', '0');
|
|
|
let token = req.body.token;
|
|
|
|
|
|
// 购物车key
|
|
|
let shoppingKey = cookie.getShoppingKey(req);
|
|
|
|
|
|
// 判断参数是否合法
|
|
|
if (!smsCode || !_.isString(token) || !_.isNumber(mobile) || !_.isNumber(area) || !password) {
|
|
|
postResult.message = '请求参数不合法';
|
|
|
return res.json(postResult);
|
|
|
}
|
|
|
|
|
|
// 判断是否允许访问
|
|
|
if (!sign.verifyToken(mobile, token)) {
|
|
|
postResult.message = '非法 token';
|
|
|
return res.json(postResult);
|
|
|
}
|
|
|
|
|
|
// 判断密码是否符合规则
|
|
|
if (!/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/.test(password)) {
|
|
|
postResult.message = '密码格式不正确';
|
|
|
return res.json(postResult);
|
|
|
}
|
|
|
|
|
|
co(function* () {
|
|
|
let validMobileCodeResult = yield RegService.validMobileCode(area, mobile, smsCode);
|
|
|
|
|
|
if (!validMobileCodeResult.code) {
|
|
|
return res.json(validMobileCodeResult);
|
|
|
}
|
|
|
|
|
|
let resultCode = _.get(validMobileCodeResult, 'code');
|
|
|
|
|
|
if (resultCode !== 200) {
|
|
|
return res.json(validMobileCodeResult);
|
|
|
}
|
|
|
|
|
|
let regMobileAesResult = yield RegService.regMobileAes(area, mobile, password,
|
|
|
shoppingKey, smsCode, inviteCode, isFromMy);
|
|
|
|
|
|
if (regMobileAesResult.code !== 200 || !regMobileAesResult.data ||
|
|
|
!regMobileAesResult.data.uid) {
|
|
|
return res.json(regMobileAesResult);
|
|
|
}
|
|
|
|
|
|
AuthHelper.syncUserSession(regMobileAesResult.data.uid, req, res, regMobileAesResult.data.session_key);
|
|
|
|
|
|
// 返回跳转到来源页面
|
|
|
let refer = req.cookies.refer;
|
|
|
|
|
|
if (regMobileAesResult.data.newUserPage) {
|
|
|
refer = regMobileAesResult.data.msgDelivery; // 来自个人中心,跳新人会场
|
|
|
} else {
|
|
|
if (refer) {
|
|
|
refer = decodeURI(req.cookies.refer);
|
|
|
} else {
|
|
|
refer = '/home';
|
|
|
}
|
|
|
|
|
|
if (/sign|login/.test(refer)) {
|
|
|
refer = '/home';
|
|
|
}
|
|
|
|
|
|
refer = utils.refererLimit(refer);
|
|
|
}
|
|
|
|
|
|
delete req.session.phoneNum;
|
|
|
|
|
|
return res.json({
|
|
|
code: 200,
|
|
|
message: '注册成功',
|
|
|
data: {
|
|
|
session: refer,
|
|
|
href: '//m.yohobuy.com/activity/invite-reg',
|
|
|
msgDelivery: _.get(regMobileAesResult, 'data.msgDelivery', '')
|
|
|
}
|
|
|
});
|
|
|
})().catch(next);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
module.exports = Reg; |
...
|
...
|
|