Authored by ccbikai

完善注册首页

@@ -7,10 +7,10 @@ @@ -7,10 +7,10 @@
7 7
8 'use strict'; 8 'use strict';
9 9
10 -// const helpers = require(global.library + '/helpers'); 10 +const helpers = require(global.library + '/helpers');
  11 +const sign = require(global.library + '/sign');
11 const RegService = require('../models/reg-service'); 12 const RegService = require('../models/reg-service');
12 -  
13 -// const _ = require('lodash'); 13 +const _ = require('lodash');
14 14
15 const reg = { 15 const reg = {
16 index: (req, res) => { 16 index: (req, res) => {
@@ -32,6 +32,96 @@ const reg = { @@ -32,6 +32,96 @@ const reg = {
32 areaCode: '+86', // 默认的区号 32 areaCode: '+86', // 默认的区号
33 countrys: RegService.getAreaData() // 地区信息列表 33 countrys: RegService.getAreaData() // 地区信息列表
34 }); 34 });
  35 + },
  36 + verifymobile: (req, res, next) => {
  37 + let data = {
  38 + code: 400,
  39 + message: '手机号已存在',
  40 + data: ''
  41 + };
  42 +
  43 +
  44 + let mobile = +req.body.phoneNum;
  45 + let area = +(req.body.areaCode || 86);
  46 +
  47 + /* 判断参数是否合法 */
  48 + if (!_.isNumber(mobile) || !_.isNumber(area)) {
  49 + data.message = '手机号错误';
  50 + return res.json(data);
  51 + }
  52 +
  53 + /* 设置注册有效时间30分钟, 防机器刷 */
  54 + let expire = req.session._REG_EXPIRE;
  55 +
  56 + if (!expire || expire < Date.now()) {
  57 + data.message = '非法请求';
  58 + return res.json(data);
  59 + }
  60 +
  61 + /* 向手机发送注册验证码 */
  62 + RegService.sendCodeToMobile(area, mobile).then((result) => {
  63 + if (!result.code) {
  64 + return res.json(data);
  65 + }
  66 +
  67 + /* 返回跳转到验证页面的链接 */
  68 + if (result.code === 200) {
  69 + let token = sign.makeToken(mobile);
  70 +
  71 + result.data = helpers.urlFormat('/passport/reg/code', {
  72 + token: token,
  73 + phoneNum: mobile,
  74 + areaCode: area
  75 + });
  76 + }
  77 +
  78 + return res.json(result);
  79 + }).catch(next);
  80 + },
  81 + verifycode: (req, res, next) => {
  82 + let data = {
  83 + code: 400,
  84 + message: '验证码错误',
  85 + data: ''
  86 + };
  87 +
  88 + let mobile = req.body.phoneNum;
  89 + let area = req.body.areaCode;
  90 + let code = req.body.code;
  91 +
  92 + /* 判断参数是否合法 */
  93 + if (!_.isNumber(mobile) || !_.isNumber(area)) {
  94 + return res.json(data);
  95 + }
  96 +
  97 + /* 设置注册有效时间30分钟, 防机器刷 */
  98 + let expire = req.session._REG_EXPIRE;
  99 +
  100 + if (!expire || expire < Date.now()) {
  101 + return res.json(data);
  102 + }
  103 +
  104 + /* 验证注册的标识码是否有效 */
  105 + RegService.validMobileCode(area, mobile, code).then((result) => {
  106 + if (!result.code) {
  107 + return res.json(data);
  108 + }
  109 +
  110 + /* 返回跳转到设置密码的链接 */
  111 + if (result.code === 200) {
  112 + let token = sign.makeToken(mobile);
  113 +
  114 + result.data = helpers.urlFormat('/passport/reg/password', {
  115 + token: token,
  116 + phoneNum: mobile,
  117 + areaCode: area
  118 + });
  119 + } else if (result.code === 404) {
  120 + result.message = '验证码错误'; // 统一验证提示
  121 + }
  122 +
  123 + return res.json(result);
  124 + }).catch(next);
35 } 125 }
36 }; 126 };
37 127
@@ -53,6 +53,7 @@ router.post('/bind/changeMobile', bind.changeMobile); @@ -53,6 +53,7 @@ router.post('/bind/changeMobile', bind.changeMobile);
53 * 注册 53 * 注册
54 */ 54 */
55 router.get('/reg/index', reg.index); 55 router.get('/reg/index', reg.index);
  56 +router.post('/reg/verifymobile', reg.verifymobile);
56 57
57 /** 58 /**
58 * 邮箱 59 * 邮箱
@@ -83,7 +83,9 @@ class Http { @@ -83,7 +83,9 @@ class Http {
83 cache.setSlave(`apiCache:${reqId}`, result, 86400).catch(catchErr); // 二级缓存存储一天 83 cache.setSlave(`apiCache:${reqId}`, result, 86400).catch(catchErr); // 二级缓存存储一天
84 } 84 }
85 85
86 - log.info(`use: ${duration}ms for ${method} api: ${options.url}?${qs.stringify(options.qs)} `); 86 + let reqData = options.qs || options.form;
  87 +
  88 + log.info(`use: ${duration}ms for ${method} api: ${options.url}?${qs.stringify(reqData)} `);
87 return result; 89 return result;
88 }).catch((err)=> { 90 }).catch((err)=> {
89 const duration = timer.put('getApi');// 统计时间结束 91 const duration = timer.put('getApi');// 统计时间结束
  1 +require('./register/register');
  1 +/**
  2 + * 注册-验证码
  3 + * @author: xuqi<qi.xu@yoho.cn>
  4 + * @date: 2015/10/8
  5 + */
  6 +
  7 +require('../code')(true);
  1 +/**
  2 + * 注册-密码
  3 + * @author: xuqi<qi.xu@yoho.cn>
  4 + * @date: 2015/10/8
  5 + */
  6 +var $ = require('jquery');
  7 +
  8 +var $pwd = $('#pwd'),
  9 + $btnSure = $('#btn-sure');
  10 +
  11 +var api = require('../api');
  12 +var tip = require('../../plugin/tip');
  13 +
  14 +var trim = $.trim;
  15 +var showErrTip = tip.show;
  16 +
  17 +api.bindEyesEvt({
  18 + status: 'open' // 默认眼睛打开
  19 +});
  20 +
  21 +$pwd.bind('input', function() {
  22 + if (trim($pwd.val()) === '') {
  23 + $btnSure.addClass('disable');
  24 + } else {
  25 + $btnSure.removeClass('disable');
  26 + }
  27 +});
  28 +
  29 +$btnSure.on('touchstart', function() {
  30 + var pwd = trim($pwd.val());
  31 +
  32 + if ($btnSure.hasClass('disable')) {
  33 + return;
  34 + }
  35 +
  36 + if (api.pwdValidate(pwd) === false) {
  37 + showErrTip('密码6-20位,请重新输入');
  38 + } else {
  39 + $.ajax({
  40 + type: 'POST',
  41 + url: '/passport/reg/setpassword',
  42 + data: {
  43 + password: pwd,
  44 + phoneNum: $('#phone-num').val(),
  45 + areaCode: $('#area-code').val(),
  46 + token: $('#token').val()
  47 + },
  48 + success: function(data) {
  49 + var res;
  50 +
  51 + if (data.code === 200) {
  52 + res = data.data;
  53 + showErrTip('注册成功');
  54 +
  55 + $.ajax({
  56 + url: res.session,
  57 + dataType: 'jsonp'
  58 + });
  59 +
  60 + // 1000ms后跳转页面
  61 + setTimeout(function() {
  62 + location.href = res.href;
  63 + }, 1000);
  64 + } else {
  65 + showErrTip(data.message);
  66 + }
  67 + }
  68 + });
  69 + }
  70 +});
  1 +/**
  2 + * 注册
  3 + * @author: xuqi<qi.xu@yoho.cn>
  4 + * @date: 2015/10/8
  5 + */
  6 +var $ = require('yoho-jquery');
  7 +
  8 +var $phoneNum = $('#phone-num'),
  9 + $countrySelect = $('#country-select'),
  10 + $areaCode = $('#area-code'),
  11 + $btnNext = $('#btn-next');
  12 +
  13 +var api = require('../api');
  14 +var tip = require('../../plugin/tip');
  15 +
  16 +var trim = $.trim;
  17 +var showErrTip = tip.show;
  18 +
  19 +var requested = false;
  20 +
  21 +api.selectCssHack($('#country-select'));
  22 +
  23 +api.bindClearEvt();
  24 +
  25 +$phoneNum.bind('input', function() {
  26 + if (trim($phoneNum.val()) === '') {
  27 + $btnNext.addClass('disable');
  28 + } else {
  29 + $btnNext.removeClass('disable');
  30 + }
  31 +});
  32 +
  33 +$countrySelect.change(function() {
  34 + $areaCode.text($countrySelect.val());
  35 +});
  36 +
  37 +$btnNext.on('touchstart', function() {
  38 + var pn = trim($phoneNum.val()),
  39 + areaCode = $countrySelect.val();
  40 +
  41 + if ($btnNext.hasClass('disable')) {
  42 + return;
  43 + }
  44 +
  45 + if (requested) {
  46 + return false;
  47 + }
  48 +
  49 +
  50 + if (api.phoneRegx[areaCode].test(pn)) {
  51 +
  52 + requested = true;
  53 +
  54 + $.ajax({
  55 + url: '/passport/reg/verifymobile',
  56 + type: 'POST',
  57 + data: {
  58 + areaCode: areaCode.replace('+', ''),
  59 + phoneNum: pn
  60 + },
  61 + success: function(data) {
  62 + if (data.code === 200) {
  63 + location.href = data.data;
  64 + } else {
  65 + showErrTip(data.message);
  66 + requested = false;
  67 + }
  68 + },
  69 + error: function() {
  70 + showErrTip('出错了,请重试');
  71 + requested = false;
  72 + }
  73 + });
  74 + } else {
  75 + showErrTip('手机号格式不正确,请重新输入');
  76 + }
  77 +});