瀏覽代碼

账号注册

lizhen_gitee 1 年之前
父節點
當前提交
648749da28
共有 2 個文件被更改,包括 119 次插入216 次删除
  1. 19 216
      application/api/controller/User.php
  2. 100 0
      application/common/library/Auth.php

+ 19 - 216
application/api/controller/User.php

@@ -104,7 +104,7 @@ class User extends Api
             $extend = [
                 'intro_uid'      => $intro_uid,
             ];
-            $ret = $this->auth->register($mobile, Random::alnum(), '', $mobile, $extend);
+            $ret = $this->auth->mobile_register($mobile, Random::alnum(), '', $mobile, $extend);
         }
         if ($ret) {
             Sms::flush($mobile, 'mobilelogin');
@@ -134,13 +134,12 @@ class User extends Api
     {
         $username = $this->request->post('username');
         $password = $this->request->post('password');
-        $email = $this->request->post('email');
-        $mobile = $this->request->post('mobile');
-        $code = $this->request->post('code');
+//        $mobile = $this->request->post('mobile');
+        $introcode = $this->request->post('introcode','');
         if (!$username || !$password) {
             $this->error(__('Invalid parameters'));
         }
-        if ($email && !Validate::is($email, "email")) {
+       /* if ($email && !Validate::is($email, "email")) {
             $this->error(__('Email is incorrect'));
         }
         if ($mobile && !Validate::regex($mobile, "^1\d{10}$")) {
@@ -149,8 +148,22 @@ class User extends Api
         $ret = Sms::check($mobile, $code, 'register');
         if (!$ret) {
             $this->error(__('Captcha is incorrect'));
+        }*/
+
+        //
+        $intro_uid = 0;
+        if(!empty($introcode)){
+            $intro_uid = Db::name('user')->where('introcode',$introcode)->value('id');
+            if(empty($intro_uid)){
+                $this->error('请填写正确的邀请码或者不填');
+            }
         }
-        $ret = $this->auth->register($username, $password, $email, $mobile, []);
+        // 用户信息不存在时使用
+        $extend = [
+            'intro_uid'      => $intro_uid,
+        ];
+
+        $ret = $this->auth->register($username, $password, '', '', $extend);
         if ($ret) {
             $data = ['userinfo' => $this->auth->getUserinfo()];
             $this->success(__('Sign up successful'), $data);
@@ -193,40 +206,6 @@ class User extends Api
         $this->success();
     }
 
-    /**
-     * 修改邮箱
-     *
-     * @ApiMethod (POST)
-     * @param string $email   邮箱
-     * @param string $captcha 验证码
-     */
-    public function changeemail()
-    {
-        $user = $this->auth->getUser();
-        $email = $this->request->post('email');
-        $captcha = $this->request->post('captcha');
-        if (!$email || !$captcha) {
-            $this->error(__('Invalid parameters'));
-        }
-        if (!Validate::is($email, "email")) {
-            $this->error(__('Email is incorrect'));
-        }
-        if (\app\common\model\User::where('email', $email)->where('id', '<>', $user->id)->find()) {
-            $this->error(__('Email already exists'));
-        }
-        $result = Ems::check($email, $captcha, 'changeemail');
-        if (!$result) {
-            $this->error(__('Captcha is incorrect'));
-        }
-        $verification = $user->verification;
-        $verification->email = 1;
-        $user->verification = $verification;
-        $user->email = $email;
-        $user->save();
-
-        Ems::flush($email, 'changeemail');
-        $this->success();
-    }
 
     /**
      * 修改手机号
@@ -263,37 +242,6 @@ class User extends Api
         $this->success();
     }
 
-    /**
-     * 第三方登录
-     *
-     * @ApiMethod (POST)
-     * @param string $platform 平台名称
-     * @param string $code     Code码
-     */
-    public function third()
-    {
-        $url = url('user/index');
-        $platform = $this->request->post("platform");
-        $code = $this->request->post("code");
-        $config = get_addon_config('third');
-        if (!$config || !isset($config[$platform])) {
-            $this->error(__('Invalid parameters'));
-        }
-        $app = new \addons\third\library\Application($config);
-        //通过code换access_token和绑定会员
-        $result = $app->{$platform}->getUserInfo(['code' => $code]);
-        if ($result) {
-            $loginret = \addons\third\library\Service::connect($platform, $result);
-            if ($loginret) {
-                $data = [
-                    'userinfo'  => $this->auth->getUserinfo(),
-                    'thirdinfo' => $result
-                ];
-                $this->success(__('Logged in successful'), $data);
-            }
-        }
-        $this->error(__('Operation failed'), $url);
-    }
 
     /**
      * 重置密码
@@ -354,149 +302,4 @@ class User extends Api
         }
     }
 
-    /**
-     * 获取用户openid
-     */
-    public function getUserOpenid() {
-        // code值
-        $code = $this->request->param('code');
-        if (!$code) {
-            $this->error(__('Invalid parameters'));
-        }
-
-        $config = config('wxMiniProgram');
-        $getopenid = 'https://api.weixin.qq.com/sns/jscode2session?appid='.$config['appid'].'&secret='.$config['secret'].'&js_code='.$code.'&grant_type=authorization_code';
-        $openidInfo = $this->getJson($getopenid);
-        if(!isset($openidInfo['openid'])) {
-            $this->error('用户openid获取失败',$openidInfo);
-        }
-        //  获取的结果存入数据库
-        $find = Db::name('user_sessionkey')->where(['openid'=>$openidInfo['openid']])->find();
-        if($find) {
-            $update = [];
-            $update['sessionkey'] = $openidInfo['session_key'];
-            $update['createtime'] = time();
-            $res = Db::name('user_sessionkey')->where(['openid'=>$openidInfo['openid']])->update($update);
-        } else {
-            $insert = [];
-            $insert['sessionkey'] = $openidInfo['session_key'];
-            $insert['openid'] = $openidInfo['openid'];
-            $insert['unionid'] = isset($openidInfo['unionid']) ? $openidInfo['unionid'] : '';
-            $insert['createtime'] = time();
-            $res = Db::name('user_sessionkey')->insertGetId($insert);
-        }
-
-        if($res !== false) {
-            $this->success('获取成功',$openidInfo);
-        } else {
-            $this->error('获取失败');
-        }
-
-    }
-
-    /**
-     * 微信小程序登录
-     */
-    public function wxMiniProgramLogin() {
-        $openid        = $this->request->request('openid');// openid值
-        $encryptedData = $this->request->request('encryptedData');// 加密数据
-        $iv            = $this->request->request('iv');// 加密算法
-        $signature     = $this->request->request('signature');// 签名验证
-        $rawData       = $this->request->request('rawData');// 签名验证
-        $logintype     = 2;// 登录方式:1=手机号,2=微信授权openid
-
-        if (!$openid || !$encryptedData || !$iv) {
-            $this->error(__('Invalid parameters'));
-        }
-
-        // 获取openid和sessionkey
-        $config = config('wxMiniProgram');
-        $openidInfo = Db::name('user_sessionkey')->where(['openid'=>$openid])->find();
-        $openid = $openidInfo['openid'];
-        $session_key = $openidInfo['sessionkey'];
-
-//        // 数据签名校验
-//        $signature2 = sha1($rawData . $session_key);
-//        if ($signature != $signature2) {
-//            $this->error(__('数据签名验证失败'));
-//        }
-
-        // 根据加密数据和加密算法获取用户信息
-        $pc = new WXBizDataCrypt($config['appid'], $session_key);
-        $data = '';
-        $errCode = $pc->decryptData(urldecode($encryptedData), $iv, $data);
-        if ($errCode != 0) {
-            $this->error('解密失败',['code'=>$errCode]);
-        }
-
-        $data = json_decode($data,true);
-        // 用户登录逻辑 === 开始
-        if($logintype == 1) { // 手机号登录
-            /*$userInfo = Db::name('user')->where(["mobile"=>$data["purePhoneNumber"]])->find();
-            // 用户信息不存在时使用
-            $extend = ["mobile"=>$data["purePhoneNumber"]];*/
-        } else { // 微信授权openid登录
-            $userInfo = Db::name('user')->where(['mini_openid'=>$openid])->find();
-            // 用户信息不存在时使用
-            $extend = [
-                'mini_openid'    => $openid,
-                'nickname'  => $data['nickName'],
-                'avatar'    => $data['avatarUrl'],
-                //'gender'    => $data['gender']==1 ? 1 : 0,
-                'mini_sessionkey'=> $session_key,
-                'unionid'   => $openidInfo['unionid'],
-                //'mobile' => $data['purePhoneNumber'],
-            ];
-        }
-        // 判断用户是否已经存在
-        if($userInfo) { // 登录
-            Db::name('user')->where('id',$userInfo['id'])->update(['logintime'=>time()]);
-            $res = $this->auth->direct($userInfo['id']);
-        } else { // 注册
-            // 先随机一个用户名,随后再变更为u+数字id
-            $username = '';
-            $password = '';
-
-            /*Db::startTrans();
-            try {*/
-            // 默认注册一个会员
-            $result = $this->auth->register($username, $password, '','', $extend);
-            if (!$result) {
-                $this->error("注册失败!");
-            }
-
-            /*     Db::commit();
-             } catch (PDOException $e) {
-                 Db::rollback();
-                 $this->auth->logout();
-                 return false;
-             }*/
-
-            // 写入登录Cookies和Token
-            $res = $this->auth->direct($this->auth->id);
-        }
-        $userInfo = $this->userInfo('return');
-        if($res) {
-            $this->success("登录成功!",$userInfo);
-        } else {
-            $this->error("登录失败!");
-        }
-
-    }
-
-    /**
-     * json 请求
-     * @param $url
-     * @return mixed
-     */
-    private function getJson($url){
-        $ch = curl_init();
-        curl_setopt($ch, CURLOPT_URL, $url);
-        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
-        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
-        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
-        $output = curl_exec($ch);
-        curl_close($ch);
-        return json_decode($output, true);
-    }
 }

+ 100 - 0
application/common/library/Auth.php

@@ -143,6 +143,106 @@ class Auth
      * @param array  $extend   扩展参数
      * @return boolean
      */
+    public function register($username, $password, $email = '', $mobile = '', $extend = [])
+    {
+        // 检测用户名、昵称、邮箱、手机号是否存在
+        if (User::getByUsername($username)) {
+            $this->setError('Username already exist');
+            return false;
+        }
+        /*if (User::getByNickname($username)) {
+            $this->setError('Nickname already exist');
+            return false;
+        }
+        if ($email && User::getByEmail($email)) {
+            $this->setError('Email already exist');
+            return false;
+        }
+        if ($mobile && User::getByMobile($mobile)) {
+            $this->setError('Mobile already exist');
+            return false;
+        }*/
+
+
+        $ip = request()->ip();
+        $time = time();
+
+        $introcode = User::column("introcode");
+
+        $data = [
+            'username' => $username,
+            'password' => $password,
+            'salt'      => Random::alnum(),
+//            'email'    => $email,
+//            'mobile'   => $mobile,
+            'nickname'  => $this->get_rand_nick_name(),
+            'avatar'   => config('default_avatar'),
+            'introcode' => $this->getUinqueNo(8, $introcode),
+
+            'last_paytime' => $time,
+        ];
+
+        $params = array_merge($data, [
+            'jointime'  => $time,
+            'joinip'    => $ip,
+            'logintime' => $time,
+            'loginip'   => $ip,
+            'prevtime'  => $time,
+            'status'    => 1
+        ]);
+        $params['password'] = $this->getEncryptPassword($password, $params['salt']);
+        $params = array_merge($params, $extend);
+
+        //安排关系网体
+        if(!empty($extend['intro_uid'])){
+            $intro = Db::name('user')->where(['id' => $extend['intro_uid']])->field('id,intro_level,intro_uid,intro_ids')->find();
+
+            $params['intro_ids'] = $intro['intro_ids'] ? ($intro['intro_ids'].','.$intro['id']) : $intro['id']; //所有上级
+            /*if(!empty($params['intro_ids'])) {
+                $params['intro_ids_new'] = ','.$params['intro_ids'].','; //便于查询所有下级
+            }*/
+            $params['intro_level'] = $intro['intro_level'] + 1; //推荐网层数
+
+        }
+
+        //账号注册时需要开启事务,避免出现垃圾数据
+        Db::startTrans();
+        try {
+            $user = User::create($params, true);
+
+            $this->_user = User::get($user->id);
+
+            //设置Token
+            $this->_token = Random::uuid();
+            Token::set($this->_token, $user->id, $this->keeptime);
+
+            //设置登录状态
+            $this->_logined = true;
+
+            //注册钱包
+            Db::name('user_wallet')->insertGetId(['user_id'=>$user->id]);
+
+            //更新直推数和团队数
+            if(!empty($extend['intro_uid'])){
+                $usermodel = new User();
+                $intronum = $usermodel->addIntroNum($extend['intro_uid'], 1, 1);
+                if(!$intronum){
+                    $this->setError('修改关系网错误');
+                    Db::rollback();
+                    return false;
+                }
+            }
+
+            //注册成功的事件
+            Hook::listen("user_register_successed", $this->_user, $data);
+            Db::commit();
+        } catch (Exception $e) {
+            $this->setError($e->getMessage());
+            Db::rollback();
+            return false;
+        }
+        return true;
+    }
     public function mobile_register($username, $password, $email = '', $mobile = '', $extend = [])
     {
         // 检测用户名、昵称、邮箱、手机号是否存在