|
|
/**
|
|
|
* 短信controller
|
|
|
* @author: leo <qi.li@yoho.cn>
|
|
|
* @date: 2017/06/26
|
|
|
*/
|
|
|
'use strict';
|
|
|
const _ = require('lodash');
|
|
|
const EventEmitter = require('events');
|
...
|
...
|
@@ -10,154 +15,169 @@ const ANONYMOUS_USER = '匿名用户'; |
|
|
const CODE_REQUIRED = '请输入校验码';
|
|
|
const GET_USER_INFO_FAILED = '获取用户信息失败';
|
|
|
|
|
|
// const BAD_PASSWORD = '密码格式不正确';
|
|
|
// const PASSWORD_REQUIRED = '请输入密码';
|
|
|
// const PASSWORD_LENGTH_ERROR = '密码6-20位,请重新输入';
|
|
|
|
|
|
/**
|
|
|
* 发送短信验证码
|
|
|
* @param req
|
|
|
* @param res
|
|
|
* @returns {*|boolean}
|
|
|
*/
|
|
|
exports.send = (req, res) => {
|
|
|
const em = new EventEmitter();
|
|
|
const area = (req.body.area || '').trim();
|
|
|
const mobile = (req.body.mobile || '').trim();
|
|
|
const inValid = [area, mobile].some(v => v === '');
|
|
|
|
|
|
em.on('resolve', () => {
|
|
|
_.set(req.session, 'smsLogin.area', area);
|
|
|
_.set(req.session, 'smsLogin.mobile', mobile);
|
|
|
|
|
|
PhoneService.sendSMS(mobile, area, 1)
|
|
|
.then(result => {
|
|
|
if (result.code === 200) {
|
|
|
return res.json({
|
|
|
code: 200,
|
|
|
message: '验证码发送成功'
|
|
|
const sms = {
|
|
|
/**
|
|
|
* 发送短信验证码
|
|
|
* @param req
|
|
|
* @param res
|
|
|
* @returns {*|boolean}
|
|
|
*/
|
|
|
send(req, res) {
|
|
|
const em = new EventEmitter();
|
|
|
const area = (req.body.area || '').trim();
|
|
|
const mobile = (req.body.mobile || '').trim();
|
|
|
const inValid = [area, mobile].some(v => v === '');
|
|
|
|
|
|
em.on('resolve', () => {
|
|
|
_.set(req.session, 'smsLogin.area', area);
|
|
|
_.set(req.session, 'smsLogin.mobile', mobile);
|
|
|
|
|
|
PhoneService.sendSMS(mobile, area, 1)
|
|
|
.then(result => {
|
|
|
if (result.code === 200) {
|
|
|
return res.json({
|
|
|
code: 200,
|
|
|
message: '验证码发送成功'
|
|
|
});
|
|
|
}
|
|
|
|
|
|
res.json({
|
|
|
code: 500,
|
|
|
message: '验证码发送失败'
|
|
|
});
|
|
|
}
|
|
|
|
|
|
res.json({
|
|
|
code: 500,
|
|
|
message: '验证码发送失败'
|
|
|
});
|
|
|
});
|
|
|
});
|
|
|
|
|
|
em.on('reject', error => {
|
|
|
res.json(error);
|
|
|
});
|
|
|
|
|
|
|
|
|
if (!inValid) {
|
|
|
return em.emit('resolve');
|
|
|
}
|
|
|
|
|
|
em.emit('reject', {
|
|
|
code: 400,
|
|
|
message: '请填写手机号'
|
|
|
});
|
|
|
};
|
|
|
|
|
|
exports.login = (req, res, next) => {
|
|
|
const code = (req.body.code || '').trim();
|
|
|
const area = _.get(req.session, 'smsLogin.area', '');
|
|
|
const mobile = _.get(req.session, 'smsLogin.mobile', '');
|
|
|
const toSignUp = (req.body.toSignUp || '').trim() || false;
|
|
|
|
|
|
if (!code) {
|
|
|
res.json({
|
|
|
code: 401,
|
|
|
message: CODE_REQUIRED
|
|
|
});
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (!mobile || !area) {
|
|
|
res.json({
|
|
|
code: 401,
|
|
|
message: VERIFY_ERROR
|
|
|
em.on('reject', error => {
|
|
|
res.json(error);
|
|
|
});
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
Promise.all([
|
|
|
PhoneService.checkUserPhoneExist(mobile, area),
|
|
|
PhoneService.verifySMS(mobile, area, code, 1)
|
|
|
])
|
|
|
.then(result => {
|
|
|
const res0 = result[0] || {};
|
|
|
const res1 = result[1] || {};
|
|
|
|
|
|
if (res0.code !== 200) {
|
|
|
res.json(res0);
|
|
|
return;
|
|
|
if (!inValid) {
|
|
|
return em.emit('resolve');
|
|
|
}
|
|
|
|
|
|
if (res1.code !== 200) {
|
|
|
res.json(res1);
|
|
|
em.emit('reject', {
|
|
|
code: 400,
|
|
|
message: '请填写手机号'
|
|
|
});
|
|
|
},
|
|
|
|
|
|
/**
|
|
|
* 验证码校验
|
|
|
* @param req
|
|
|
* @param res
|
|
|
*/
|
|
|
check(req, res) {
|
|
|
console.log(req, res);
|
|
|
},
|
|
|
|
|
|
/**
|
|
|
* 验证码登录
|
|
|
* @param req
|
|
|
* @param res
|
|
|
* @param next
|
|
|
*/
|
|
|
login(req, res, next) {
|
|
|
const code = (req.body.code || '').trim();
|
|
|
const area = _.get(req.session, 'smsLogin.area', '');
|
|
|
const mobile = _.get(req.session, 'smsLogin.mobile', '');
|
|
|
const toSignUp = (req.body.toSignUp || '').trim() || false;
|
|
|
|
|
|
if (!code) {
|
|
|
res.json({
|
|
|
code: 401,
|
|
|
message: CODE_REQUIRED
|
|
|
});
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 失败
|
|
|
if (res1.data.is_pass !== 'Y') {
|
|
|
if (!mobile || !area) {
|
|
|
res.json({
|
|
|
code: 401,
|
|
|
message: VERIFY_ERROR
|
|
|
});
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 未注册
|
|
|
if (res0.data.is_register !== 'Y') {
|
|
|
if (toSignUp) {
|
|
|
// TODO 对于想要注册的用户直接注册
|
|
|
} else {
|
|
|
res.json({
|
|
|
code: 200,
|
|
|
data: {
|
|
|
avatar: '',
|
|
|
name: `匿名用户${Math.random() * 100000}`,
|
|
|
},
|
|
|
message: ANONYMOUS_USER
|
|
|
});
|
|
|
}
|
|
|
return;
|
|
|
}
|
|
|
Promise.all([
|
|
|
PhoneService.checkUserPhoneExist(mobile, area),
|
|
|
PhoneService.verifySMS(mobile, area, code, 1)
|
|
|
])
|
|
|
.then(result => {
|
|
|
const res0 = result[0] || {};
|
|
|
const res1 = result[1] || {};
|
|
|
|
|
|
// 已注册
|
|
|
PhoneService.autoSignin({
|
|
|
profile: mobile,
|
|
|
code: res1.data.code,
|
|
|
area
|
|
|
})
|
|
|
.then(info => {
|
|
|
if (info.code !== 200) {
|
|
|
return res.json({
|
|
|
code: info.code,
|
|
|
data: GET_USER_INFO_FAILED
|
|
|
});
|
|
|
}
|
|
|
if (res0.code !== 200) {
|
|
|
res.json(res0);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
const uid = info.data.uid;
|
|
|
const sessionKey = info.data.session_key;
|
|
|
if (res1.code !== 200) {
|
|
|
res.json(res1);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
return AuthHelper.syncUserSession(uid, req, res, sessionKey);
|
|
|
})
|
|
|
.then(() => {
|
|
|
res.json({
|
|
|
code: 200,
|
|
|
data: req.session.user,
|
|
|
message: LOGIN_SUCCESS
|
|
|
});
|
|
|
})
|
|
|
.catch(error => {
|
|
|
res.json(error);
|
|
|
});
|
|
|
// 失败
|
|
|
if (res1.data.is_pass !== 'Y') {
|
|
|
res.json({
|
|
|
code: 401,
|
|
|
message: VERIFY_ERROR
|
|
|
});
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
})
|
|
|
.catch(next);
|
|
|
// 未注册
|
|
|
if (res0.data.is_register !== 'Y') {
|
|
|
if (toSignUp) {
|
|
|
// TODO 对于想要注册的用户直接注册
|
|
|
} else {
|
|
|
res.json({
|
|
|
code: 200,
|
|
|
data: {
|
|
|
avatar: '',
|
|
|
name: `匿名用户${Math.random() * 100000}`,
|
|
|
},
|
|
|
message: ANONYMOUS_USER
|
|
|
});
|
|
|
}
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 已注册
|
|
|
PhoneService.autoSignin({
|
|
|
profile: mobile,
|
|
|
code: res1.data.code,
|
|
|
area
|
|
|
})
|
|
|
.then(info => {
|
|
|
if (info.code !== 200) {
|
|
|
return res.json({
|
|
|
code: info.code,
|
|
|
data: GET_USER_INFO_FAILED
|
|
|
});
|
|
|
}
|
|
|
|
|
|
const uid = info.data.uid;
|
|
|
const sessionKey = info.data.session_key;
|
|
|
|
|
|
return AuthHelper.syncUserSession(uid, req, res, sessionKey);
|
|
|
})
|
|
|
.then(() => {
|
|
|
res.json({
|
|
|
code: 200,
|
|
|
data: req.session.user,
|
|
|
message: LOGIN_SUCCESS
|
|
|
});
|
|
|
})
|
|
|
.catch(error => {
|
|
|
res.json(error);
|
|
|
});
|
|
|
|
|
|
})
|
|
|
.catch(next);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
module.exports = sms; |
...
|
...
|
|