Zhouzhendong 4 лет назад
Родитель
Сommit
e5b8e0bd8e

+ 9 - 7
app/Console/Commands/LoginListenerCommand.php

@@ -24,20 +24,22 @@ class LoginListenerCommand extends Command
 
         // Emitted when new connection come
         /*$ws_worker->onConnect = function ($connection) {
-            echo "New connection\n";
         };*/
 
         // Emitted when data received
         $ws_worker->onMessage = function ($connection, $data) {
-            $data = json_decode($data);
-            // Send hello $data
-            $connection->send(app("UserService")->verifySingleTag($data->user, $data->token) ? "true" : "false");
+            try {
+                $data = json_decode($data);
+                $_SERVER['HTTP_USER_AGENT'] = $data->userAgent;
+                $connection->send(app("UserService")->verifySingleTag($data->user, $data->token) ? "true" : "false");
+            }catch (\Exception $e){
+                Log::error("SOCKET连接恶意信息",[$e->getMessage(),$data]);
+            }
         };
 
         // Emitted when connection closed
-        /*$ws_worker->onClose = function ($connection) {
-            echo "Connection closed\n";
-        };*/
+        $ws_worker->onClose = function ($connection) {
+        };
 
         // Run worker
         Worker::runAll();

+ 1 - 3
app/Http/ApiControllers/LoginController.php

@@ -8,7 +8,6 @@ use App\User;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
-use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\Hash;
 
 class LoginController
@@ -77,8 +76,7 @@ class LoginController
             $token = app("UserService")->getJWTToken($user,$privateKey);
 
             //单点登录标记
-            Cache::tags(User::ANDROID_SINGLE_TAG)->put($user->id,$token,
-                config("api.timeliness_limits.token","7200"));
+            app("UserService")->setSingleTag($user->id,$token);
             $response["data"] = ["token"=>$token,
                 "menu"=>$this->getMenu($user),"info"=>["id"=>$user->id,"name"=>$user->name]];
             app("UserService")->setOrRefreshCache($user);

+ 2 - 3
app/Http/Controllers/TestController.php

@@ -14,6 +14,7 @@ use Illuminate\Database\Capsule\Manager;
 use Illuminate\Database\DatabaseManager;
 use Illuminate\Foundation\Auth\AuthenticatesUsers;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Hash;
 use Illuminate\Support\Facades\Log;
@@ -40,9 +41,7 @@ class TestController extends Controller
         }
     }
     public function test(Request $request){
-        $a = true;
-        $b = false;
-        dd(json_decode("{\"user\":\"1\",\"token\":\"1\"}"));
+        dd(Cache::tags(User::ANDROID_SINGLE_TAG)->get(64));
     }
 }
 

+ 6 - 3
app/Services/UserService.php

@@ -12,6 +12,7 @@ use Illuminate\Database\Eloquent\Model;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Cache;
 use App\Traits\ServiceAppAop;
+use Illuminate\Support\Facades\Log;
 
 
 class UserService
@@ -179,7 +180,8 @@ class UserService
         return $user;
     }
 
-    public function setSingleTag($key, $token){
+    public function setSingleTag($key, $token)
+    {
         $val = $token."#".md5($_SERVER['HTTP_USER_AGENT']);
         Cache::tags(User::ANDROID_SINGLE_TAG)->put($key,$val,
             config("api.timeliness_limits.token","7200"));
@@ -188,7 +190,8 @@ class UserService
     public function verifySingleTag($key, $token):bool
     {
         $tV = Cache::tags(User::ANDROID_SINGLE_TAG)->get($key);
-        if (!$tV)return true;
-        return $tV===($token."#".md5($_SERVER['HTTP_USER_AGENT']));
+        if ($tV===null)return true;
+        $userAgent = isset($_SERVER['HTTP_USER_AGENT']) ? "#".md5($_SERVER['HTTP_USER_AGENT']) : "";
+        return $tV===($token.$userAgent);
     }
 }

+ 0 - 16
config/octane.php

@@ -1,16 +0,0 @@
-<?php
-return [
-    'workerman' => [
-        'transport' => 'tcp',
-        'context' => [],
-        'name' => env('APP_NAME', 'laravel-octane-workerman'),
-        'count' => cpu_count() * 2,
-        'user' => '',
-        'group' => '',
-        'reuse_port' => true,
-        'pid_file' => storage_path('logs/webman.pid'),
-        'stdout_file' => storage_path('logs/stdout.log'),
-        'log_file' => storage_path('logs/workerman.log'),
-        'max_package_size' => 10 * 1024 * 1024,
-    ]
-];

+ 0 - 27
config/socket.php

@@ -1,27 +0,0 @@
-<?php
-
-return [
-
-    /*
-     * $httpHost HTTP hostname clients intend to connect to.
-     * MUST match JS `new WebSocket('ws://$httpHost')`.
-     */
-    'httpHost'    => env('SOCKET_HTTP_HOST', 'localhost'),
-
-    /*
-     * Port to listen on. If 80, assuming production,
-     * Flash on 843 otherwise expecting Flash to be proxied through 8843
-     */
-    'port'        => env('SOCKET_PORT', '8080'),
-
-    /*
-     * Public port for Nginx
-     */
-    'public_port' => env('SOCKET_PUBLIC_PORT', '443'),
-
-    /*
-     * IP address to bind to. Default is localhost/proxy only.
-     * `0.0.0.0` for any machine.
-     */
-    'address'     => env('SOCKET_ADDRESS', '127.0.0.1'),
-];