Bladeren bron

auth bugs

zz 6 jaren geleden
bovenliggende
commit
ede7a72e34
2 gewijzigde bestanden met toevoegingen van 33 en 10 verwijderingen
  1. 26 10
      app/Http/Controllers/Wap/Oauth/UsersV2Controller.php
  2. 7 0
      app/Http/Middleware/ReadOauth.php

+ 26 - 10
app/Http/Controllers/Wap/Oauth/UsersV2Controller.php

@@ -68,16 +68,22 @@ class UsersV2Controller extends Controller
         $unionid = $user_data['unionid'];
         $user = UserService::getUserByUnionAndChannelId($openid,$distribution_channel_id);
         !isset($url_info['path']) && $url_info['path'] = '/';
-
-        !$user && $user = $this->createUser($openid,$unionid,$distribution_channel_id,$send_order_id);
+        $rp = [];
+        $ip = '';
+        if(isset($url_info['query'])){
+            parse_str($url_info['query'],$rp);
+            if(isset($rp['ip'])){
+                $ip = $rp['ip'];
+                unset($rp['ip']);
+            }
+        }
+        !$user && $user = $this->createUser($openid,$unionid,$distribution_channel_id,$send_order_id,$ip);
 
         $query = ['auth_uid'=>$user->id,'atime'=>time()];
         $sign = get_sign($query);
         $query['sign'] = $sign;
-        if(isset($url_info['query'])){
-            parse_str($url_info['query'],$p);
-            $query = array_merge($query,$p);
-        }
+        if($rp) $query = array_merge($query,$rp);
+
         $url = sprintf('%s://%s%s?%s',$url_info['scheme'],$url_info['host'],$url_info['path'],http_build_query($query));
         Log::info('wcCallbackParse back url is :');
         Log::info($url);
@@ -113,7 +119,15 @@ class UsersV2Controller extends Controller
         $unionid = $user_data['unionid'];
         $user = UserService::getUserByUnionAndChannelId($openid,$distribution_channel_id);
         !isset($url_info['path']) && $url_info['path'] = '/';
-
+        $ip = '';
+        $rp = [];
+        if(isset($url_info['query'])){
+            parse_str($url_info['query'],$rp);
+            if(isset($rp['ip'])){
+                $ip = $rp['ip'];
+                unset($rp['ip']);
+            }
+        }
         if(!$user){
             $auth_redirect_two_appids = specialChannelAuthInfo();
             if($auth_times == 1 && $auth_redirect_two_appids && isset($auth_redirect_two_appids[$distribution_channel_id])){
@@ -134,13 +148,14 @@ class UsersV2Controller extends Controller
                 $app = new Application($options);
                 return $app->oauth->redirect();
             }else{
-                $user = $this->createUser($openid,$unionid,$distribution_channel_id,$send_order_id);
+                $user = $this->createUser($openid,$unionid,$distribution_channel_id,$send_order_id,$ip);
             }
         }
 
         $query = ['auth_uid'=>$user->id,'atime'=>time()];
         $sign = get_sign($query);
         $query['sign'] = $sign;
+        if($rp) $query = array_merge($query,$rp);
         $url = sprintf('%s://%s%s?%s',$url_info['scheme'],$url_info['host'],$url_info['path'],http_build_query($query));
         Log::info('wcCallbackParse back url is :');
         Log::info($url);
@@ -148,13 +163,14 @@ class UsersV2Controller extends Controller
         return redirect()->to($url);
     }
 
-    private function createUser($openid,$unionid,$distribution_channel_id,$send_order_id){
+    private function createUser($openid,$unionid,$distribution_channel_id,$send_order_id,$ip){
         $user =  UserService::addUser(
             ['openid' => $openid,
                 'unionid' => $unionid,
                 'distribution_channel_id' =>$distribution_channel_id,
                 'send_order_id'=>$send_order_id,
-                'is_new'=>1
+                'is_new'=>1,
+                'register_ip'=>$ip
             ]);
         // 注册动作
         $action_type = 'Register';

+ 7 - 0
app/Http/Middleware/ReadOauth.php

@@ -1123,7 +1123,14 @@ class ReadOauth
     private function authReduceRedirect(Request $request,$distribution_channel_id,$send_order_id){
         $h5_scheme = env('H5_SCHEME', 'https');
         $params = $request->except('_url');
+        if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR']) {
+            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
+        } else {
+            $ip = get_client_ip();
+        }
+        $params['id'] = $ip;
         $url = str_replace('http://', $h5_scheme . '://', url()->current() . '?' . http_build_query($params));
+        unset($params['id']);
         $params['redirect_url'] = urlencode($url);
         $params['timestamp'] = time();
         $params['channel_id'] = $distribution_channel_id;