regOpen)) { $regist = Model("SystemOption")->get("regist"); $this->regOpen = $regist['openRegist'] == '1'; } if (!$this->regOpen) { show_json("未开启注册,请联系管理员!",false); } } /** * 发送验证码——注册、找回密码 */ public function sendMsgCode() { $data = Input::getArray(array( 'type' => array('check' => 'in', 'param' => array('email', 'phone')), 'input' => array('check' => 'require'), 'source' => array('check' => 'require'), 'checkCode' => array('check' => 'require'), )); $type = $data['type']; $input = $data['input']; $source = $data['source']; // 个人设置、注册、找回密码 if(!in_array($source, array('setting', 'regist', 'findpwd'))){ show_json(LNG('common.invalidRequest'), false); } if (!Input::check($input, $type)) { $text = $type . ($type == 'phone' ? 'Number' : ''); show_json(LNG('common.invalid') . LNG('common.' . $text), false); } // 图形验证码 Action('user.setting')->checkImgCode($data['checkCode']); // 1.1前端注册检测 if ($source == 'regist') { $this->checkAllow(); $this->userRegistCheck($data); } // 1.2找回密码(前端找回、后端重置)检测 if ($source == 'findpwd') { $this->userFindPwdCheck($data); } // 2.发送邮件/短信 Action('user.setting')->checkMsgFreq($data); // 消息发送频率检查 if ($type == 'email') { $res = Action('user.bind')->sendEmail($input, $type.'_'.$source); } else { $res = Action('user.bind')->sendSms($input, $type.'_'.$source); } if (!$res['code']) { show_json(LNG('user.sendFail') . ': ' . $res['data'], false); } Action('user.setting')->checkMsgFreq($data, true); // 3.存储验证码 $param = array( 'type' => $source, 'input' => $input ); Action('user.setting')->checkMsgCode($type, $res['data'], $param, true); show_json(LNG('user.sendSuccess'), true); } /** * 判断号码、邮箱是否已注册 * @param type $data */ private function userRegistCheck($data) { $where = array($data['type'] => $data['input']); if (Model('User')->userSearch($where)) { show_json(LNG('common.' . $data['type']) . LNG('user.registed'), false); } } /** * 判断账号(及图片验证码-前端)是否有效-找回密码 * @param type $data * @return type */ private function userFindPwdCheck($data) { $userID = Input::get('userID', 'require', '0'); $text = $data['type'] . ($data['type'] == 'phone' ? 'Number' : ''); // 前端找回密码 if ($userID == '0') { $where = array($data['type'] => $data['input']); if (!Model('User')->userSearch($where)) { show_json(LNG('common.' . $text) . LNG('common.error'), false); // show_json(LNG('common.' . $data['type']) . LNG('user.notRegist'), false); } return; } // 后端重置密码 $userInfo = Model('User')->getInfoSimple($userID); if (empty($userInfo)) { show_json(LNG('common.illegalRequest'), false); } if(!$userInfo[$data['type']]) { show_json(LNG('common.' . $text) . LNG('common.error'), false); // show_json(LNG('common.' . $text) . LNG('user.notBind'), false); } // 提交的邮箱、手机和用户信息中的不匹配 if ($userInfo[$data['type']] != $data['input']) { show_json(sprintf(LNG('user.inputNotMatch'), LNG('common.' . $text)), false); } } /** * 注册 */ public function regist() { $this->checkAllow(); $data = Input::getArray(array( 'type' => array('check' => 'in', 'param' => array('email', 'phone')), 'input' => array('check' => 'require'), 'name' => array('default' => null), 'nickName' => array('default' => null), 'password' => array('check' => 'require'), 'msgCode' => array('check' => 'require'), // 消息验证码 )); foreach ($data as $k => $val) { $data[$k] = rawurldecode($val); } if(empty($data['name'])) $data['name'] = $data['input']; // 兼容app注册 // 邮箱/手机号校验 if (!Input::check($data['input'], $data['type'])) { $text = $data['type'] . ($data['type'] == 'phone' ? 'Number' : ''); show_json(LNG('common.invalid') . LNG('common.' . $text), false); } // 消息验证码校验 if(!$msgCode = Input::get('msgCode')){ show_json(LNG('user.inputVerifyCode'), false); } $param = array( 'type' => 'regist', 'input' => $data['input'] ); Action('user.setting')->checkMsgCode($data['type'], $msgCode, $param); // 密码校验 $salt = Input::get('salt',null, 0); $password = $salt == 1 ? Action('user.setting')->decodePwd($data['password']) : $data['password']; $data['password'] = rawurldecode($password); if( !ActionCall('filter.userCheck.password',$data['password']) ){ return ActionCall('filter.userCheck.passwordTips'); } $this->addUser($data); } /** * 新增/注册用户 * @param type $data * @return type */ public function addUser($data) { $this->checkAllow(); $name = $data['name']; $nickName = trim($data['nickName']); $nickName = $nickName ? $nickName : ''; $bindRegist = true; // 绑定注册 if (isset($data['type']) && isset($data['input'])) { $bindRegist = false; if (Model('User')->userSearch(array($data['type'] => $data['input'])) ) { $text = $data['type'] . ($data['type'] == 'phone' ? 'Number' : ''); return show_json(LNG('common.' . $text) . LNG('common.error'), false); // return show_json(LNG('common.' . $data['type']) . LNG('user.registed'), false); } } // 3.1用户基础信息保存 $regist = Model("SystemOption")->get("regist"); $this->in = array( 'name' => $name, 'nickName' => $nickName, 'password' => $data['password'], 'roleID' => $regist['roleID'], 'email' => isset($data['email']) ? $data['email'] : '', 'phone' => isset($data['phone']) ? $data['phone'] : '', 'avatar' => isset($data['avatar']) ? $data['avatar'] : '', 'sex' => isset($data['sex']) ? $data['sex'] : 1, 'sizeMax' => floatval($regist['sizeMax']), //M 'status' => $regist['checkRegist'] == 1 ? 0 : 1, //0禁用;1启用 等待审核可以改为-1 'groupInfo' => $regist['groupInfo'] ); !$bindRegist && $this->in[$data['type']] = $data['input']; $res = ActionCallHook('admin.member.add'); // 绑定注册,直接返回新增结果 if ($bindRegist) return $res; // show_json(true, true, userID) if(!$res['code']) { $msg = $res['data'] ? $res['data'] : LNG('explorer.error'); show_json($msg, false); } $code = true; $msg = LNG('user.registSuccess'); if(!$this->in['status']){ $code = ERROR_CODE_USER_INVALID; $msg .= LNG('user.waitCheck'); } show_json($msg, $code); } }