Showing
6 changed files
with
71 additions
and
46 deletions
@@ -139,6 +139,12 @@ const setNewPasswordByEmailAPI = (req, res) => { | @@ -139,6 +139,12 @@ const setNewPasswordByEmailAPI = (req, res) => { | ||
139 | * 找回密码页面-通过手机号 | 139 | * 找回密码页面-通过手机号 |
140 | */ | 140 | */ |
141 | const indexMobilePage = (req, res, next) => { | 141 | const indexMobilePage = (req, res, next) => { |
142 | + _.set(req.session, 'backupCaptch.verifyResult', false); | ||
143 | + | ||
144 | + if (req.session.captchaValidCount == null) { // eslint-disable-line | ||
145 | + req.session.captchaValidCount = 5; | ||
146 | + } | ||
147 | + | ||
142 | service.getAreaDataAsync() | 148 | service.getAreaDataAsync() |
143 | .then(result => { | 149 | .then(result => { |
144 | res.render('back/mobile', Object.assign({ | 150 | res.render('back/mobile', Object.assign({ |
@@ -204,21 +210,12 @@ const sendCodeToMobileAPI = (req, res, next) => { | @@ -204,21 +210,12 @@ const sendCodeToMobileAPI = (req, res, next) => { | ||
204 | } | 210 | } |
205 | } | 211 | } |
206 | 212 | ||
207 | - /* 如果设置了验证次数,验证是否合法,验证次数减 1;没有,设置验证次数 */ | ||
208 | - if (_.has(req.session, 'backupCaptch.useTime')) { | ||
209 | - if (parseInt(req.session.backupCaptch.useTime, 10) <= 0) { | 213 | + let errorCount = _.get(req.session, 'captchaValidCount', 4); // 初始1次 + 后续4次, 同一个验证码 共5次 |
210 | 214 | ||
211 | - /* 如果超过验证次数,冻结 5 分钟,更新验证次数 */ | ||
212 | - req.session.backupCaptch.timeout = Date.now() + 5 * 60 * 1000; | ||
213 | - req.session.backupCaptch.useTime = 5; | ||
214 | - return res.json({ | ||
215 | - code: 401, | ||
216 | - message: '请5分钟后尝试!' | ||
217 | - }); | ||
218 | - } | ||
219 | - req.session.backupCaptch.useTime = req.session.backupCaptch.useTime - 1; | 215 | + if (!errorCount) { |
216 | + _.set(req.session, 'captchaValidCount', 4); | ||
220 | } else { | 217 | } else { |
221 | - _.set(req.session, 'backupCaptch.useTime', 5); | 218 | + --req.session.captchaValidCount; |
222 | } | 219 | } |
223 | 220 | ||
224 | if (verifyCode) { | 221 | if (verifyCode) { |
@@ -227,10 +224,17 @@ const sendCodeToMobileAPI = (req, res, next) => { | @@ -227,10 +224,17 @@ const sendCodeToMobileAPI = (req, res, next) => { | ||
227 | if (captcha && verifyCode.toString() === captcha) { | 224 | if (captcha && verifyCode.toString() === captcha) { |
228 | req.session.backupCaptch.verifyResult = true; | 225 | req.session.backupCaptch.verifyResult = true; |
229 | } else { | 226 | } else { |
230 | - return res.json({ | 227 | + let jsonData = { |
231 | code: 400, | 228 | code: 400, |
232 | - message: '验证码输入错误' | ||
233 | - }); | 229 | + message: '请将图片旋转到正确位置' |
230 | + }; | ||
231 | + | ||
232 | + if (req.session.captchaValidCount === 0) { | ||
233 | + req.session.captcha = void 0; // 验证码 用过就扔 | ||
234 | + jsonData.changeCaptcha = true; | ||
235 | + } | ||
236 | + | ||
237 | + return res.json(jsonData); | ||
234 | } | 238 | } |
235 | } else if (!req.session.backupCaptch.verifyResult) { | 239 | } else if (!req.session.backupCaptch.verifyResult) { |
236 | 240 |
@@ -81,6 +81,10 @@ const common = { | @@ -81,6 +81,10 @@ const common = { | ||
81 | 81 | ||
82 | const local = { | 82 | const local = { |
83 | loginPage: (req, res) => { | 83 | loginPage: (req, res) => { |
84 | + if (req.session.captchaValidCount == null) { // eslint-disable-line | ||
85 | + req.session.captchaValidCount = 5; | ||
86 | + } | ||
87 | + | ||
84 | // 先清除cookie | 88 | // 先清除cookie |
85 | // res.clearCookie('LE' + md5('_LOGIN_EXPIRE'), { | 89 | // res.clearCookie('LE' + md5('_LOGIN_EXPIRE'), { |
86 | // domain: 'yohobuy.com' | 90 | // domain: 'yohobuy.com' |
@@ -161,14 +165,28 @@ const local = { | @@ -161,14 +165,28 @@ const local = { | ||
161 | let captchaInput = req.body.captcha; | 165 | let captchaInput = req.body.captcha; |
162 | let captchaCode = _.get(req.session, 'captcha'); | 166 | let captchaCode = _.get(req.session, 'captcha'); |
163 | 167 | ||
164 | - delete req.session.captcha; // 用过就丢弃 | 168 | + let errorCount = _.get(req.session, 'captchaValidCount', 4); // 初始1次 + 后续4次, 同一个验证码 共5次 |
169 | + | ||
170 | + if (!errorCount) { | ||
171 | + _.set(req.session, 'captchaValidCount', 4); | ||
172 | + } else { | ||
173 | + --req.session.captchaValidCount; | ||
174 | + } | ||
165 | 175 | ||
166 | if (!captchaInput || !captchaCode || captchaInput !== captchaCode) { | 176 | if (!captchaInput || !captchaCode || captchaInput !== captchaCode) { |
167 | - res.json({ | 177 | + let jsonData = { |
168 | code: 400, | 178 | code: 400, |
169 | message: '请将图片旋转到正确方向', | 179 | message: '请将图片旋转到正确方向', |
170 | captchaShow: true | 180 | captchaShow: true |
171 | - }); | 181 | + }; |
182 | + | ||
183 | + | ||
184 | + if (req.session.captchaValidCount === 0) { | ||
185 | + req.session.captcha = void 0; // 验证码 用过就扔 | ||
186 | + jsonData.changeCaptcha = true; | ||
187 | + } | ||
188 | + | ||
189 | + res.json(jsonData); | ||
172 | 190 | ||
173 | return; | 191 | return; |
174 | } | 192 | } |
@@ -38,8 +38,8 @@ exports.beforeIn = (req, res, next) => { | @@ -38,8 +38,8 @@ exports.beforeIn = (req, res, next) => { | ||
38 | const _step1 = (req, res, next) => { | 38 | const _step1 = (req, res, next) => { |
39 | _.set(req.session, 'smsLogin.step', 1); | 39 | _.set(req.session, 'smsLogin.step', 1); |
40 | 40 | ||
41 | - if (req.session.smsLogin.count == null) { // eslint-disable-line | ||
42 | - req.session.smsLogin.count = 5; | 41 | + if (req.session.captchaValidCount == null) { // eslint-disable-line |
42 | + req.session.captchaValidCount = 5; | ||
43 | } | 43 | } |
44 | 44 | ||
45 | let template = 'sms/login'; | 45 | let template = 'sms/login'; |
@@ -135,6 +135,15 @@ exports.indexCheck = (req, res, next) => { | @@ -135,6 +135,15 @@ exports.indexCheck = (req, res, next) => { | ||
135 | 135 | ||
136 | let em = new EventEmitter(); | 136 | let em = new EventEmitter(); |
137 | 137 | ||
138 | + | ||
139 | + let errorCount = _.get(req.session, 'captchaValidCount', 4 - 1); // 初始1次 + 后续4次, 同一个验证码 共5次 | ||
140 | + | ||
141 | + if (!errorCount) { | ||
142 | + _.set(req.session, 'captchaValidCount', 3); | ||
143 | + } else { | ||
144 | + --req.session.captchaValidCount; | ||
145 | + } | ||
146 | + | ||
138 | // 校验 成功 | 147 | // 校验 成功 |
139 | em.on('resolve', () => { | 148 | em.on('resolve', () => { |
140 | // 1. 将信息放入 session | 149 | // 1. 将信息放入 session |
@@ -144,14 +153,6 @@ exports.indexCheck = (req, res, next) => { | @@ -144,14 +153,6 @@ exports.indexCheck = (req, res, next) => { | ||
144 | 153 | ||
145 | PhoneService.sendSMS(mobile, area, 1); | 154 | PhoneService.sendSMS(mobile, area, 1); |
146 | 155 | ||
147 | - --req.session.smsLogin.count; | ||
148 | - | ||
149 | - if (!req.session.smsLogin.count) { | ||
150 | - _.set(req.session, 'smsLogin.interval', Date.now() + 5 * 60 * 1000); | ||
151 | - } else { | ||
152 | - _.set(req.session, 'smsLogin.interval', Date.now() + 60 * 1000); | ||
153 | - } | ||
154 | - | ||
155 | res.json({ | 156 | res.json({ |
156 | code: 200, | 157 | code: 200, |
157 | redirect: '/passport/sms_login?step=2' | 158 | redirect: '/passport/sms_login?step=2' |
@@ -160,14 +161,18 @@ exports.indexCheck = (req, res, next) => { | @@ -160,14 +161,18 @@ exports.indexCheck = (req, res, next) => { | ||
160 | 161 | ||
161 | // 校验 失败 | 162 | // 校验 失败 |
162 | em.on('reject', error => { | 163 | em.on('reject', error => { |
164 | + if (req.session.captchaValidCount === 0) { | ||
165 | + req.session.captcha = void 0; // 验证码 用过就扔 | ||
166 | + error.changeCaptcha = true; | ||
167 | + } | ||
168 | + | ||
163 | _.set(req.session, 'smsLogin.step', 1); | 169 | _.set(req.session, 'smsLogin.step', 1); |
164 | 170 | ||
171 | + | ||
165 | res.json(error); | 172 | res.json(error); |
166 | }); | 173 | }); |
167 | 174 | ||
168 | 175 | ||
169 | - req.session.captcha = void 0; // 验证码 用过就扔 | ||
170 | - | ||
171 | // 验证 | 176 | // 验证 |
172 | if ([area, mobile].some(val => val === '')) { | 177 | if ([area, mobile].some(val => val === '')) { |
173 | return em.emit('reject', {code: 400, message: '请填写手机号'}); | 178 | return em.emit('reject', {code: 400, message: '请填写手机号'}); |
@@ -84,13 +84,11 @@ $btnNext.on('touchstart', function() { | @@ -84,13 +84,11 @@ $btnNext.on('touchstart', function() { | ||
84 | showErrTip(data.message); | 84 | showErrTip(data.message); |
85 | } | 85 | } |
86 | 86 | ||
87 | - imgCheck.refresh(); | 87 | + data.changeCaptcha && imgCheck.refresh(); |
88 | } | 88 | } |
89 | }); | 89 | }); |
90 | } else if (!area) { | 90 | } else if (!area) { |
91 | showErrTip('出错了,请重新刷新页面'); | 91 | showErrTip('出错了,请重新刷新页面'); |
92 | - } else if (verify === '0000') { | ||
93 | - showErrTip('请将图片旋转到正确位置'); | ||
94 | } else { | 92 | } else { |
95 | showErrTip('手机号格式不正确,请重新输入'); | 93 | showErrTip('手机号格式不正确,请重新输入'); |
96 | } | 94 | } |
@@ -97,13 +97,13 @@ $loginBtn.on('touchstart', function() { | @@ -97,13 +97,13 @@ $loginBtn.on('touchstart', function() { | ||
97 | return; | 97 | return; |
98 | } | 98 | } |
99 | 99 | ||
100 | - if (imgCheck.atWorking) { | ||
101 | - captcha = imgCheck.getResults(); | 100 | + // if (imgCheck.atWorking) { |
101 | + // captcha = imgCheck.getResults(); | ||
102 | 102 | ||
103 | - if (captcha === '0000') { | ||
104 | - return tip.show(' 请将图片旋转到正确方向'); | ||
105 | - } | ||
106 | - } | 103 | + // if (captcha === '0000') { |
104 | + // return tip.show(' 请将图片旋转到正确方向'); | ||
105 | + // } | ||
106 | + // } | ||
107 | 107 | ||
108 | $loginBtn.text('正在登录...').addClass('disable'); | 108 | $loginBtn.text('正在登录...').addClass('disable'); |
109 | 109 | ||
@@ -133,7 +133,7 @@ $loginBtn.on('touchstart', function() { | @@ -133,7 +133,7 @@ $loginBtn.on('touchstart', function() { | ||
133 | $loginBtn.text('登录成功').off(); | 133 | $loginBtn.text('登录成功').off(); |
134 | } else { | 134 | } else { |
135 | if (data.captchaShow) { | 135 | if (data.captchaShow) { |
136 | - imgCheck.atWorking ? imgCheck.refresh() : imgCheck.init(); | 136 | + imgCheck.atWorking ? (data.changeCaptcha && imgCheck.refresh()) : imgCheck.init(); |
137 | } | 137 | } |
138 | 138 | ||
139 | showErrTip(data.message); | 139 | showErrTip(data.message); |
@@ -94,10 +94,10 @@ page = { | @@ -94,10 +94,10 @@ page = { | ||
94 | return; | 94 | return; |
95 | } | 95 | } |
96 | 96 | ||
97 | - if (captcha === '0000') { | ||
98 | - tip.show('请将图片旋转到正确位置'); | ||
99 | - return; | ||
100 | - } | 97 | + // if (captcha === '0000') { |
98 | + // tip.show('请将图片旋转到正确位置'); | ||
99 | + // return; | ||
100 | + // } | ||
101 | 101 | ||
102 | $nextBtn.prop('disabled', true); | 102 | $nextBtn.prop('disabled', true); |
103 | $.post('/passport/sms_login/step1_check', { | 103 | $.post('/passport/sms_login/step1_check', { |
@@ -111,7 +111,7 @@ page = { | @@ -111,7 +111,7 @@ page = { | ||
111 | $nextBtn.off(); | 111 | $nextBtn.off(); |
112 | location.href = data.redirect; | 112 | location.href = data.redirect; |
113 | } else { | 113 | } else { |
114 | - imgCheck.refresh(); | 114 | + data.changeCaptcha && imgCheck.refresh(); |
115 | tip.show(data.message); | 115 | tip.show(data.message); |
116 | } | 116 | } |
117 | }) | 117 | }) |
-
Please register or login to post a comment