224 lines
7.0 KiB
PHP
Raw Permalink Normal View History

2024-08-31 01:03:37 +08:00
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
class userRegist extends Controller {
public function __construct() {
parent::__construct();
}
public function checkAllow(){
if (!isset($this->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);
}
}