瀏覽代碼

修正注册BUG

admin 7 年之前
父節點
當前提交
e22cc6ed97

+ 73 - 34
app/Http/Controllers/RegisterController.php

@@ -24,6 +24,7 @@ use Mail;
 class RegisterController extends Controller
 {
     // 注册页
+    // TODO:改成点击发送验证码按钮,而不是到邮箱里去打开激活链接
     public function index(Request $request)
     {
         $cacheKey = 'register_times_' . md5(getClientIp()); // 注册限制缓存key
@@ -47,6 +48,13 @@ class RegisterController extends Controller
                 Session::forget('register_token');
             }
 
+            // 是否开启注册
+            if (!$this->systemConfig['is_register']) {
+                Session::flash('errorMsg', '系统维护,暂停注册');
+
+                return Redirect::back();
+            }
+
             if (empty($username)) {
                 Session::flash('errorMsg', '请输入用户名');
 
@@ -83,17 +91,10 @@ class RegisterController extends Controller
                 if (!Captcha::check($captcha)) {
                     Session::flash('errorMsg', '验证码错误,请重新输入');
 
-                    return Redirect::back()->withInput($request->except(['password', 'repassword']));
+                    return Redirect::back()->withInput();
                 }
             }
 
-            // 是否开启注册
-            if (!$this->systemConfig['is_register']) {
-                Session::flash('errorMsg', '系统维护暂停注册');
-
-                return Redirect::back();
-            }
-
             // 如果需要邀请注册
             if ($this->systemConfig['is_invite_register']) {
                 if (empty($code)) {
@@ -124,25 +125,13 @@ class RegisterController extends Controller
             }
 
             // 校验用户名是否已存在
-            $exists = User::query()->where('username', $username)->first();
+            $exists = User::query()->where('username', $username)->exists();
             if ($exists) {
                 Session::flash('errorMsg', '用户名已存在,请更换用户名');
 
                 return Redirect::back()->withInput();
             }
 
-            // 校验aff对应账号是否存在
-            $aff = $request->cookie('register_aff') ? $request->cookie('register_aff') : 0;
-            if ($aff) { // 优先处理邀请链接
-                $affUser = User::query()->where('id', $aff)->first();
-                $referral_uid = $affUser ? $aff : 0;
-            } elseif ($code) { // 如果使用邀请码,则将邀请码也列入aff
-                $inviteCode = Invite::query()->where('code', $code)->where('status', 0)->first();
-                $referral_uid = $inviteCode ? $inviteCode->uid : 0;
-            } else {
-                $referral_uid = 0;
-            }
-
             // 获取可用端口
             $port = $this->systemConfig['is_rand_port'] ? $this->getRandPort() : $this->getOnlyPort();
             if ($port > $this->systemConfig['max_port']) {
@@ -151,6 +140,10 @@ class RegisterController extends Controller
                 return Redirect::back()->withInput();
             }
 
+            // 获取aff
+            $affArr = $this->getAff($code, $aff);
+            $referral_uid = $affArr['referral_uid'];
+
             $transfer_enable = $referral_uid ? ($this->systemConfig['default_traffic'] + $this->systemConfig['referral_traffic']) * 1048576 : $this->systemConfig['default_traffic'] * 1048576;
 
             // 创建新用户
@@ -189,8 +182,8 @@ class RegisterController extends Controller
                 }
 
                 // 更新邀请码
-                if ($this->systemConfig['is_invite_register'] && $aff == 0) {
-                    Invite::query()->where('id', $inviteCode->id)->update(['fuid' => $user->id, 'status' => 1]);
+                if ($this->systemConfig['is_invite_register'] && $affArr['code_id']) {
+                    Invite::query()->where('id', $affArr['code_id'])->update(['fuid' => $user->id, 'status' => 1]);
                 }
             }
 
@@ -198,22 +191,14 @@ class RegisterController extends Controller
             if ($this->systemConfig['is_active_register']) {
                 // 生成激活账号的地址
                 $token = md5($this->systemConfig['website_name'] . $username . microtime());
-                $verify = new Verify();
-                $verify->user_id = $user->id;
-                $verify->username = $username;
-                $verify->token = $token;
-                $verify->status = 0;
-                $verify->save();
-
                 $activeUserUrl = $this->systemConfig['website_url'] . '/active/' . $token;
-                $title = '注册激活';
-                $content = '请求地址:' . $activeUserUrl;
+                $this->addVerify($user->id, $username, $token);
 
                 try {
                     Mail::to($username)->send(new activeUser($this->systemConfig['website_name'], $activeUserUrl));
-                    $this->sendEmailLog($user->id, $title, $content);
+                    $this->sendEmailLog($user->id, '注册激活', '请求地址:' . $activeUserUrl);
                 } catch (\Exception $e) {
-                    $this->sendEmailLog($user->id, $title, $content, 0, $e->getMessage());
+                    $this->sendEmailLog($user->id, '注册激活', '请求地址:' . $activeUserUrl, 0, $e->getMessage());
                 }
 
                 Session::flash('regSuccessMsg', '注册成功:激活邮件已发送,如未收到,请查看垃圾邮箱');
@@ -245,5 +230,59 @@ class RegisterController extends Controller
         }
     }
 
+    /**
+     * 获取AFF
+     *
+     * @param string $code 邀请码
+     * @param string $aff  URL中的aff参数
+     *
+     * @return array
+     */
+    private function getAff($code = '', $aff = '')
+    {
+        // 邀请人ID
+        $referral_uid = 0;
+
+        // 有邀请码先用邀请码,用谁的邀请码就给谁返利
+        if ($code) {
+            $inviteCode = Invite::query()->where('code', $code)->where('uid', '>', 0)->where('status', 0)->first();
+            if ($inviteCode) {
+                $referral_uid = $inviteCode->uid;
+
+                return [
+                    'referral_uid' => $referral_uid,
+                    'code_id'      => $inviteCode->id
+                ];
+            }
+        }
 
+        // 没有用邀请码或者邀请码是管理员生成的,则检查cookie或者url链接
+        if (!$referral_uid) {
+            // 检查一下cookie里有没有aff
+            $cookieAff = \Request::cookie('register_aff') ? \Request::cookie('register_aff') : 0;
+            if ($cookieAff) {
+                $affUser = User::query()->where('id', $cookieAff)->exists();
+                $referral_uid = $affUser ? $cookieAff : 0;
+            } elseif ($aff) { // 如果cookie里没有aff,就再检查一下请求的url里有没有aff,因为有些人的浏览器会禁用了cookie,比如chrome开了隐私模式
+                $affUser = User::query()->where('id', $aff)->exists();
+                $referral_uid = $affUser ? $aff : 0;
+            }
+        }
+
+        return [
+            'referral_uid' => $referral_uid,
+            'code_id'      => 0
+        ];
+    }
+
+    // 写入生成激活账号验证记录
+    private function addVerify($userId, $username, $token)
+    {
+        $verify = new Verify();
+        $verify->user_id = $userId;
+        $verify->username = $username;
+        $verify->token = $token;
+        $verify->status = 0;
+        $verify->save();
+    }
 }

+ 1 - 1
resources/views/admin/inviteList.blade.php

@@ -63,7 +63,7 @@
                                             @foreach($inviteList as $invite)
                                                 <tr>
                                                     <td> {{$invite->id}} </td>
-                                                    <td> <a href="{{url('register?aff='.Session::get('user')['id'].'&code='.$invite->code)}}" target="_blank">{{$invite->code}}</a> </td>
+                                                    <td> <a href="{{url('register?code='.$invite->code)}}" target="_blank">{{$invite->code}}</a> </td>
                                                     <td> {{$invite->dateline}} </td>
                                                     <td> 
                                                         @if($invite->uid == '0')

+ 1 - 1
resources/views/user/free.blade.php

@@ -92,7 +92,7 @@
                                                 @else
                                                     @foreach($inviteList as $key => $invite)
                                                         <tr>
-                                                            <td style="width: 50%; text-align: center;"> <a href="{{url('register?aff='.Session::get('user')['id'].'&code='.$invite->code)}}" target="_blank">{{$invite->code}}</a> </td>
+                                                            <td style="width: 50%; text-align: center;"> <a href="{{url('register?code='.$invite->code)}}" target="_blank">{{$invite->code}}</a> </td>
                                                             <td style="width: 50%; text-align: center;"> {{$invite->dateline}} </td>
                                                         </tr>
                                                     @endforeach

+ 1 - 1
routes/web.php

@@ -100,7 +100,7 @@ Route::group(['middleware' => ['forbidden', 'user', 'admin']], function () {
     Route::get('logs', '\Rap2hpoutre\LaravelLogViewer\LogViewerController@index'); // 系统运行日志
 });
 
-Route::group(['middleware' => ['forbidden', 'user', 'affiliate']], function () {
+Route::group(['middleware' => ['forbidden', 'user']], function () {
     Route::any('/', 'UserController@index'); // 用户首页
     Route::any('article', 'UserController@article'); // 文章详情
     Route::post('exchangeSubscribe', 'UserController@exchangeSubscribe'); // 更换节点订阅地址