auth; if (!Config::get('fastadmin.usercenter')) { $this->error(__('User center already closed')); } //监听注册登录注销的事件 Hook::add('user_login_successed', function ($user) use ($auth) { $expire = input('post.keeplogin') ? 30 * 86400 : 0; Cookie::set('uid', $user->id, $expire); Cookie::set('token', $auth->getToken(), $expire); }); Hook::add('user_register_successed', function ($user) use ($auth) { Cookie::set('uid', $user->id); Cookie::set('token', $auth->getToken()); }); Hook::add('user_delete_successed', function ($user) use ($auth) { Cookie::delete('uid'); Cookie::delete('token'); }); Hook::add('user_logout_successed', function ($user) use ($auth) { Cookie::delete('uid'); Cookie::delete('token'); }); } /** * 空的请求 * @param $name * @return mixed */ public function _empty($name) { $data = Hook::listen("user_request_empty", $name); foreach ($data as $index => $datum) { $this->view->assign($datum); } return $this->view->fetch('user/' . $name); } /** * 会员中心 */ public function index() { $this->view->assign('title', __('User center')); return $this->view->fetch(); } /** * 注册会员 */ public function register() { $url = $this->request->request('url', ''); if ($this->auth->id) { $this->success(__('You\'ve logged in, do not login again'), $url ? $url : url('user/index')); } if ($this->request->isPost()) { $username = $this->request->post('username'); $password = $this->request->post('password'); $email = $this->request->post('email'); $mobile = $this->request->post('mobile', ''); $captcha = $this->request->post('captcha'); $token = $this->request->post('__token__'); $rule = [ 'username' => 'require|length:3,30', 'password' => 'require|length:6,30', 'email' => 'require|email', 'mobile' => 'regex:/^1\d{10}$/', '__token__' => 'require|token', ]; $msg = [ 'username.require' => 'Username can not be empty', 'username.length' => 'Username must be 3 to 30 characters', 'password.require' => 'Password can not be empty', 'password.length' => 'Password must be 6 to 30 characters', 'email' => 'Email is incorrect', 'mobile' => 'Mobile is incorrect', ]; $data = [ 'username' => $username, 'password' => $password, 'email' => $email, 'mobile' => $mobile, '__token__' => $token, ]; //验证码 $captchaResult = true; $captchaType = config("fastadmin.user_register_captcha"); if ($captchaType) { if ($captchaType == 'mobile') { $captchaResult = Sms::check($mobile, $captcha, 'register'); } elseif ($captchaType == 'email') { $captchaResult = Ems::check($email, $captcha, 'register'); } elseif ($captchaType == 'wechat') { $captchaResult = WechatCaptcha::check($captcha, 'register'); } elseif ($captchaType == 'text') { $captchaResult = \think\Validate::is($captcha, 'captcha'); } } if (!$captchaResult) { $this->error(__('Captcha is incorrect')); } $validate = new Validate($rule, $msg); $result = $validate->check($data); if (!$result) { $this->error(__($validate->getError()), null, ['token' => $this->request->token()]); } if ($this->auth->register($username, $password, $email, $mobile)) { $site = Config::get("site"); $traffic = $site['gift_traffic']; \app\common\model\User::update(['total_traffic'=>$traffic],['id'=>$this->auth->id]); $this->success(__('Sign up successful'), $url ? $url : url('user/index')); } else { $this->error($this->auth->getError(), null, ['token' => $this->request->token()]); } } //判断来源 $referer = $this->request->server('HTTP_REFERER'); if (!$url && (strtolower(parse_url($referer, PHP_URL_HOST)) == strtolower($this->request->host())) && !preg_match("/(user\/login|user\/register|user\/logout)/i", $referer)) { $url = $referer; } $this->view->assign('captchaType', config('fastadmin.user_register_captcha')); $this->view->assign('url', $url); $this->view->assign('title', __('Register')); return $this->view->fetch(); } /** * 会员登录 */ public function login() { $url = $this->request->request('url', ''); if ($this->auth->id) { $this->success(__('You\'ve logged in, do not login again'), $url ? $url : url('user/index')); } if ($this->request->isPost()) { $account = $this->request->post('account'); $password = $this->request->post('password'); $keeplogin = (int)$this->request->post('keeplogin'); $token = $this->request->post('__token__'); $rule = [ 'account' => 'require|length:3,50', 'password' => 'require|length:6,30', '__token__' => 'require|token', ]; $msg = [ 'account.require' => 'Account can not be empty', 'account.length' => 'Account must be 3 to 50 characters', 'password.require' => 'Password can not be empty', 'password.length' => 'Password must be 6 to 30 characters', ]; $data = [ 'account' => $account, 'password' => $password, '__token__' => $token, ]; $validate = new Validate($rule, $msg); $result = $validate->check($data); if (!$result) { $this->error(__($validate->getError()), null, ['token' => $this->request->token()]); return false; } if ($this->auth->login($account, $password)) { $this->success(__('Logged in successful'), $url ? $url : url('user/index')); } else { $this->error($this->auth->getError(), null, ['token' => $this->request->token()]); } } //判断来源 $referer = $this->request->server('HTTP_REFERER'); if (!$url && (strtolower(parse_url($referer, PHP_URL_HOST)) == strtolower($this->request->host())) && !preg_match("/(user\/login|user\/register|user\/logout)/i", $referer)) { $url = $referer; } $this->view->assign('url', $url); $this->view->assign('title', __('Login')); return $this->view->fetch(); } /** * 注销登录 */ public function logout() { //注销本站 $this->auth->logout(); $this->success(__('Logout successful'), url('user/index')); } /** * 个人信息 */ public function profile() { $this->view->assign('title', __('Profile')); return $this->view->fetch(); } /** * 修改密码 */ public function changepwd() { if ($this->request->isPost()) { $oldpassword = $this->request->post("oldpassword"); $newpassword = $this->request->post("newpassword"); $renewpassword = $this->request->post("renewpassword"); $token = $this->request->post('__token__'); $rule = [ 'oldpassword' => 'require|length:6,30', 'newpassword' => 'require|length:6,30', 'renewpassword' => 'require|length:6,30|confirm:newpassword', '__token__' => 'token', ]; $msg = [ ]; $data = [ 'oldpassword' => $oldpassword, 'newpassword' => $newpassword, 'renewpassword' => $renewpassword, '__token__' => $token, ]; $field = [ 'oldpassword' => __('Old password'), 'newpassword' => __('New password'), 'renewpassword' => __('Renew password') ]; $validate = new Validate($rule, $msg, $field); $result = $validate->check($data); if (!$result) { $this->error(__($validate->getError()), null, ['token' => $this->request->token()]); return false; } $ret = $this->auth->changepwd($newpassword, $oldpassword); if ($ret) { $this->success(__('Reset password successful'), url('user/login')); } else { $this->error($this->auth->getError(), null, ['token' => $this->request->token()]); } } $this->view->assign('title', __('Change password')); return $this->view->fetch(); } /** * 购买流量套餐 */ public function goods() { $config = get_addon_config('recharge'); $moneyList = []; $moneyList = [ ['value'=>10,'text'=>'¥10','default'=>true], ['value'=>20,'text'=>'¥20','default'=>false], ['value'=>30,'text'=>'¥30','default'=>false], ['value'=>50,'text'=>'¥50','default'=>false], ['value'=>100,'text'=>'¥100','default'=>false], ]; $this->view->assign('addonConfig', $config); $this->view->assign('moneyList', $moneyList); $this->view->assign('title', '商城'); return $this->view->fetch(); } /** * 购买流量 */ public function buy_traffic() { $money = $this->request->post("money"); if($this->auth->money < $money){return $this->error('余额不足,请充值有以后购买!');} $site = Config::get("site"); $traffic = intval($money) * $site['rate_traffic']; Db::startTrans(); try { \app\common\model\User::where(['id'=>$this->auth->id])->setInc('total_traffic',$traffic); \app\common\model\User::where(['id'=>$this->auth->id])->setDec('money',$money); Db::commit(); return $this->success('购买成功,刷新个人中心查看流量'); }catch (Exception $ex){ Db::rollback(); return $this->error('购买失败!'); } } }