|
@@ -12,6 +12,8 @@ const RegService = require('../models/reg-service'); |
|
@@ -12,6 +12,8 @@ const RegService = require('../models/reg-service'); |
12
|
const BindService = require('../models/bind-service');
|
12
|
const BindService = require('../models/bind-service');
|
13
|
const AuthHelper = require('../models/auth-helper');
|
13
|
const AuthHelper = require('../models/auth-helper');
|
14
|
const _ = require('lodash');
|
14
|
const _ = require('lodash');
|
|
|
15
|
+const config = global.yoho.config;
|
|
|
16
|
+const moment = require('moment');
|
15
|
|
17
|
|
16
|
const Sources = {
|
18
|
const Sources = {
|
17
|
qq: 'QQ',
|
19
|
qq: 'QQ',
|
|
@@ -87,32 +89,54 @@ const bind = { |
|
@@ -87,32 +89,54 @@ const bind = { |
87
|
let openId = req.body.openId;
|
89
|
let openId = req.body.openId;
|
88
|
let areaCode = req.body.areaCode || '86';
|
90
|
let areaCode = req.body.areaCode || '86';
|
89
|
let sourceType = req.body.sourceType;
|
91
|
let sourceType = req.body.sourceType;
|
|
|
92
|
+ let verify = req.body.verify || '';
|
|
|
93
|
+ let testCode = req.body.yohobuy;
|
90
|
|
94
|
|
91
|
if (_.isNumber(parseInt(phoneNum, 0)) && openId && areaCode && sourceType) {
|
95
|
if (_.isNumber(parseInt(phoneNum, 0)) && openId && areaCode && sourceType) {
|
92
|
- BindService.bindCheck(phoneNum, openId, sourceType, areaCode).then(result => {
|
|
|
93
|
- let data = {
|
|
|
94
|
- code: result.code,
|
|
|
95
|
- message: result.message,
|
|
|
96
|
- data: {}
|
|
|
97
|
- };
|
|
|
98
|
-
|
|
|
99
|
- if (result.code === 200) {
|
|
|
100
|
- let nextUrl = helpers.urlFormat('/passport/bind/code', {
|
|
|
101
|
- isReg: result.data.is_register, // esline-disable-line
|
|
|
102
|
- openId: openId,
|
|
|
103
|
- sourceType: sourceType,
|
|
|
104
|
- areaCode: areaCode,
|
|
|
105
|
- phoneNum: phoneNum
|
|
|
106
|
- });
|
|
|
107
|
-
|
|
|
108
|
- data.data.isReg = result.data.is_register;
|
|
|
109
|
- data.data.next = nextUrl;
|
96
|
+ if (verify) {
|
|
|
97
|
+ let captcha = _.get(req, 'session.captcha');
|
|
|
98
|
+
|
|
|
99
|
+ if ((captcha && verify.toString() === captcha) || (testCode === config.testCode)) {
|
|
|
100
|
+ BindService.bindCheck(phoneNum, openId, sourceType, areaCode).then(result => {
|
|
|
101
|
+ let data = {
|
|
|
102
|
+ code: result.code,
|
|
|
103
|
+ message: result.message,
|
|
|
104
|
+ data: {}
|
|
|
105
|
+ };
|
|
|
106
|
+
|
|
|
107
|
+ if (result.code === 200) {
|
|
|
108
|
+ let nextUrl = helpers.urlFormat('/passport/bind/code', {
|
|
|
109
|
+ isReg: result.data.is_register, // esline-disable-line
|
|
|
110
|
+ openId: openId,
|
|
|
111
|
+ sourceType: sourceType,
|
|
|
112
|
+ areaCode: areaCode,
|
|
|
113
|
+ phoneNum: phoneNum
|
|
|
114
|
+ });
|
|
|
115
|
+
|
|
|
116
|
+ data.data.isReg = result.data.is_register;
|
|
|
117
|
+ data.data.next = nextUrl;
|
|
|
118
|
+ } else {
|
|
|
119
|
+ data.data = result.data;
|
|
|
120
|
+ }
|
|
|
121
|
+
|
|
|
122
|
+ res.json(data);
|
|
|
123
|
+ }).catch(next);
|
110
|
} else {
|
124
|
} else {
|
111
|
- data.data = result.data;
|
125
|
+ let jsonData = {
|
|
|
126
|
+ code: 400,
|
|
|
127
|
+ message: '请将图片旋转到正确位置'
|
|
|
128
|
+ };
|
|
|
129
|
+
|
|
|
130
|
+ if (req.session.captchaValidCount === 0) {
|
|
|
131
|
+ req.session.captcha = null; // 验证码 用过就扔
|
|
|
132
|
+ jsonData.changeCaptcha = true;
|
|
|
133
|
+ }
|
|
|
134
|
+
|
|
|
135
|
+ return res.json(jsonData);
|
112
|
}
|
136
|
}
|
113
|
|
137
|
|
114
|
- res.json(data);
|
|
|
115
|
- }).catch(next);
|
138
|
+ _.set(req.session, 'captcha', null);
|
|
|
139
|
+ }
|
116
|
} else {
|
140
|
} else {
|
117
|
res.json({
|
141
|
res.json({
|
118
|
code: 400,
|
142
|
code: 400,
|
|
@@ -122,6 +146,40 @@ const bind = { |
|
@@ -122,6 +146,40 @@ const bind = { |
122
|
}
|
146
|
}
|
123
|
},
|
147
|
},
|
124
|
|
148
|
|
|
|
149
|
+ //防刷
|
|
|
150
|
+ sendBefore: (req, res, next) => {
|
|
|
151
|
+ let count = _.get(req.session, 'bind.count');
|
|
|
152
|
+ let interval = _.get(req.session, 'bind.interval');
|
|
|
153
|
+
|
|
|
154
|
+ let now = Date.now();
|
|
|
155
|
+
|
|
|
156
|
+ // // 重发次数用完了, 会冻结5min
|
|
|
157
|
+ // // 1. 过了冻结期, count 重设为 5次
|
|
|
158
|
+ // // 2. 没过冻结期, end
|
|
|
159
|
+ // // 没有用完, 判断是否请求太频繁
|
|
|
160
|
+ let during = moment.duration(interval - now, 'ms').minutes();
|
|
|
161
|
+ let message = `请${during}分钟后再试`;
|
|
|
162
|
+
|
|
|
163
|
+ if (!count) {
|
|
|
164
|
+ if (interval > now) {
|
|
|
165
|
+ return res.json({
|
|
|
166
|
+ code: 400,
|
|
|
167
|
+ message: message,
|
|
|
168
|
+ during: Math.ceil((interval - now) / 1000)
|
|
|
169
|
+ });
|
|
|
170
|
+ } else {
|
|
|
171
|
+ _.set(req.session, 'bind.count', 5);
|
|
|
172
|
+ }
|
|
|
173
|
+ } else if (interval > now) {
|
|
|
174
|
+ return res.json({
|
|
|
175
|
+ code: 429,
|
|
|
176
|
+ message: message
|
|
|
177
|
+ });
|
|
|
178
|
+ }
|
|
|
179
|
+
|
|
|
180
|
+ next();
|
|
|
181
|
+ },
|
|
|
182
|
+
|
125
|
sendBindMsg: (req, res, next) => {
|
183
|
sendBindMsg: (req, res, next) => {
|
126
|
let phoneNum = req.body.phoneNum;
|
184
|
let phoneNum = req.body.phoneNum;
|
127
|
let areaCode = req.body.areaCode;
|
185
|
let areaCode = req.body.areaCode;
|
|
@@ -129,6 +187,24 @@ const bind = { |
|
@@ -129,6 +187,24 @@ const bind = { |
129
|
if (req.xhr && _.isNumber(parseInt(phoneNum, 0)) && areaCode) {
|
187
|
if (req.xhr && _.isNumber(parseInt(phoneNum, 0)) && areaCode) {
|
130
|
BindService.sendBindMsg(areaCode, phoneNum).then(result => {
|
188
|
BindService.sendBindMsg(areaCode, phoneNum).then(result => {
|
131
|
if (result && result.code) {
|
189
|
if (result && result.code) {
|
|
|
190
|
+
|
|
|
191
|
+ if (result.code === 200) {
|
|
|
192
|
+
|
|
|
193
|
+ _.set(req.session, 'bind.area', areaCode);
|
|
|
194
|
+ _.set(req.session, 'bind.mobile', phoneNum);
|
|
|
195
|
+
|
|
|
196
|
+ --req.session.bind.count;
|
|
|
197
|
+
|
|
|
198
|
+ if (!req.session.bind.count) {
|
|
|
199
|
+ _.set(req.session, 'bind.interval', Date.now() + 5 * 60 * 1000);
|
|
|
200
|
+ } else {
|
|
|
201
|
+ _.set(req.session, 'bind.interval', Date.now() + 60 * 1000);
|
|
|
202
|
+ }
|
|
|
203
|
+
|
|
|
204
|
+ // res.json(result);
|
|
|
205
|
+ // return;
|
|
|
206
|
+ }
|
|
|
207
|
+
|
132
|
res.json(result);
|
208
|
res.json(result);
|
133
|
} else {
|
209
|
} else {
|
134
|
res.json({ code: 400, message: '', data: '' });
|
210
|
res.json({ code: 400, message: '', data: '' });
|