You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
212 lines
6.0 KiB
212 lines
6.0 KiB
<?php
|
|
|
|
defined('IN_IA') or exit('Access Denied');
|
|
|
|
class Mobile extends OAuth2Client {
|
|
public function __construct($ak, $sk) {
|
|
parent::__construct($ak, $sk);
|
|
$this->stateParam['from'] = 'mobile';
|
|
}
|
|
|
|
public function showLoginUrl($calback_url = '') {
|
|
}
|
|
|
|
public function user() {
|
|
global $_GPC, $_W;
|
|
$mobile = trim($_GPC['username']);
|
|
$member['password'] = $_GPC['password'];
|
|
pdo_delete('users_failed_login', array('lastupdate <' => TIMESTAMP - 3600));
|
|
$failed = pdo_get('users_failed_login', array('username' => $mobile, 'ip' => $_W['clientip']));
|
|
if ($failed['count'] >= 5) {
|
|
return error('-1', '输入密码错误次数超过5次,请在1小时后再登录');
|
|
}
|
|
if (!empty($_W['setting']['copyright']['verifycode'])) {
|
|
$verify = trim($_GPC['verify']);
|
|
if (empty($verify)) {
|
|
return error('-1', '请输入验证码');
|
|
}
|
|
$result = checkcaptcha($verify);
|
|
if (empty($result)) {
|
|
return error('-1', '输入验证码错误');
|
|
}
|
|
}
|
|
if (empty($mobile)) {
|
|
return error('-1', '请输入要登录的手机号');
|
|
}
|
|
if (!preg_match(REGULAR_MOBILE, $mobile)) {
|
|
return error(-1, '手机号格式不正确');
|
|
}
|
|
if (empty($member['password'])) {
|
|
return error('-1', '请输入密码');
|
|
}
|
|
|
|
$user_profile = table('users_profile')->getByMobile($mobile);
|
|
|
|
if (empty($user_profile)) {
|
|
return error(-1, '手机号未注册');
|
|
}
|
|
$member['uid'] = $user_profile['uid'];
|
|
$member['type'] = $this->user_type;
|
|
|
|
return $member;
|
|
}
|
|
|
|
public function validateMobile() {
|
|
global $_GPC;
|
|
$mobile = $_GPC['mobile'];
|
|
if (empty($mobile)) {
|
|
return error(-1, '手机号不能为空');
|
|
}
|
|
if (!preg_match(REGULAR_MOBILE, $mobile)) {
|
|
return error(-1, '手机号格式不正确');
|
|
}
|
|
$mobile_exists = table('users_profile')->getByMobile($mobile);
|
|
if (!empty($mobile_exists)) {
|
|
return error(-1, '手机号已存在');
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public function register() {
|
|
global $_GPC;
|
|
load()->model('user');
|
|
$member = array();
|
|
$profile = array();
|
|
$smscode = trim($_GPC['smscode']);
|
|
$mobile = trim($_GPC['mobile']);
|
|
$member['password'] = $_GPC['password'];
|
|
|
|
if (empty($smscode)) {
|
|
return error(-1, '短信验证码不能为空');
|
|
}
|
|
|
|
load()->model('utility');
|
|
$verify_info = utility_smscode_verify(0, $mobile, $smscode);
|
|
if (is_error($verify_info)) {
|
|
return error(-1, $verify_info['message']);
|
|
}
|
|
|
|
if (istrlen($member['password']) < 8) {
|
|
return error(-1, '必须输入密码,且密码长度不得低于8位。');
|
|
}
|
|
|
|
$member['username'] = $mobile;
|
|
$member['openid'] = $mobile;
|
|
$member['register_type'] = USER_REGISTER_TYPE_MOBILE;
|
|
$member['owner_uid'] = intval($_GPC['owner_uid']);
|
|
|
|
$profile['mobile'] = $mobile;
|
|
|
|
$register = array(
|
|
'member' => $member,
|
|
'profile' => $profile,
|
|
);
|
|
|
|
return parent::user_register($register);
|
|
}
|
|
|
|
public function login() {
|
|
return $this->user();
|
|
}
|
|
|
|
public function bind() {
|
|
global $_GPC, $_W;
|
|
$mobile = safe_gpc_string($_GPC['mobile']);
|
|
|
|
$user = table('users')->getById($_W['uid']);
|
|
if (empty($user)) {
|
|
return error(-1, '请先登录');
|
|
}
|
|
$user_profile = table('users_profile')->getByUid($_W['uid']);
|
|
$user_bind = table('users_bind')->getByTypeAndUid(USER_REGISTER_TYPE_MOBILE, $_W['uid']);
|
|
$need_checkcaptcha = true;
|
|
if (isset($_GPC['need_checkcaptcha']) && empty($_GPC['need_checkcaptcha'])) {
|
|
$need_checkcaptcha = false;
|
|
}
|
|
if (!$need_checkcaptcha && !empty($user_bind)) {
|
|
$check_authcode = safe_gpc_string($_GPC['check_authcode']);
|
|
if (empty($check_authcode)) {
|
|
return error(-1, '请先验证旧手机!');
|
|
}
|
|
$old_mobile = authcode($check_authcode);
|
|
if ($old_mobile != $user_bind['bind_sign']) {
|
|
return error(-1, '请先验证旧手机!');
|
|
}
|
|
}
|
|
|
|
$param_validate = $this->paramValidate();
|
|
|
|
if (is_error($param_validate)) {
|
|
return $param_validate;
|
|
}
|
|
|
|
if (empty($user_profile)) {
|
|
pdo_insert('users_profile', array('uid' => $_W['uid'], 'mobile' => $mobile));
|
|
} else {
|
|
pdo_update('users_profile', array('mobile' => $mobile), array('id' => $user_profile['id']));
|
|
}
|
|
|
|
if (empty($user_bind)) {
|
|
pdo_insert('users_bind', array('uid' => $_W['uid'], 'bind_sign' => $mobile, 'third_type' => USER_REGISTER_TYPE_MOBILE, 'third_nickname' => $mobile));
|
|
} else {
|
|
table('users_bind')->where(array('uid' => $_W['uid'], 'third_type' => USER_REGISTER_TYPE_MOBILE))->fill(array('bind_sign' => $mobile, 'third_nickname' => $mobile))->save();
|
|
}
|
|
|
|
return error(0, '绑定成功');
|
|
}
|
|
|
|
public function unbind() {
|
|
global $_GPC, $_W;
|
|
$mobile = safe_gpc_string($_GPC['mobile']);
|
|
|
|
$user_profile = table('users_profile')->getByUid($_W['uid']);
|
|
|
|
$param_validate = $this->paramValidate();
|
|
|
|
if (is_error($param_validate)) {
|
|
return $param_validate;
|
|
}
|
|
pdo_update('users', array('openid' => ''), array('uid' => $_W['uid']));
|
|
pdo_update('users_profile', array('mobile' => ''), array('id' => $user_profile['id']));
|
|
pdo_delete('users_bind', array('uid' => $_W['uid'], 'bind_sign' => $mobile, 'third_type' => USER_REGISTER_TYPE_MOBILE));
|
|
|
|
return error(0, '解除绑定成功');
|
|
}
|
|
|
|
public function isbind() {
|
|
global $_W;
|
|
$bind_info = table('users_bind')->getByTypeAndUid(USER_REGISTER_TYPE_MOBILE, $_W['uid']);
|
|
|
|
return !empty($bind_info['bind_sign']);
|
|
}
|
|
|
|
public function paramValidate() {
|
|
global $_GPC;
|
|
$mobile = trim($_GPC['mobile']);
|
|
$image_code = trim($_GPC['imagecode']);
|
|
$sms_code = trim($_GPC['smscode']);
|
|
$need_checkcaptcha = true;
|
|
if (isset($_GPC['need_checkcaptcha']) && empty($_GPC['need_checkcaptcha'])) {
|
|
$need_checkcaptcha = false;
|
|
}
|
|
if (empty($sms_code)) {
|
|
return error(-1, '短信验证码不能为空');
|
|
}
|
|
|
|
if ($need_checkcaptcha && empty($image_code)) {
|
|
return error(-1, '图形验证码不能为空');
|
|
}
|
|
if ($need_checkcaptcha) {
|
|
$captcha = checkcaptcha($image_code);
|
|
if (empty($captcha)) {
|
|
return error(-1, '图形验证码错误,请重新获取');
|
|
}
|
|
}
|
|
load()->model('utility');
|
|
$verify_info = utility_smscode_verify(0, $mobile, $sms_code);
|
|
if (is_error($verify_info)) {
|
|
return error(-1, $verify_info['message']);
|
|
}
|
|
}
|
|
}
|