zory há 1 semana atrás
pai
commit
fae8a25278

+ 69 - 4
app/controller/exe/Login.php

@@ -3,6 +3,8 @@
 namespace app\controller\exe;
 
 use app\extra\basic\Base;
+use app\middleware\ExeMiddleware;
+use app\model\saas\SaasAgent;
 use app\model\system\SystemUser;
 use LinFly\Annotation\Route\Controller;
 use LinFly\Annotation\Route\Route;
@@ -11,6 +13,7 @@ use support\Request;
 use support\Response;
 use think\facade\Db;
 use Tinywan\Captcha\Captcha;
+use Webman\Annotation\Middleware;
 
 
 #[Controller(prefix: "/exe/login")]
@@ -29,16 +32,78 @@ class Login extends Base
             $param = $this->_valid([
                 "username.require"  => trans("empty.user"),
                 "password.require"  => trans("empty.passwd"),
-                "code.require"      => trans("empty.code"),
-                "key.require"       => trans("empty.data"),
             ],"post");
             if (!is_array($param)) return error($param);
-            if (Captcha::check($param['code'],$param['key']) === false) return errorTrans("error.captcha");
             $map = ["is_deleted" => 0,"username" => $param['username']];
-            return successTrans("success.login");
+            [$state,$msg,$user] = $this->checkLogin($map,2,$param);
+            if (!$state) return error($msg);
+            return successTrans("success.login",$user);
         } catch (\Throwable $throwable) {
             return error($throwable->getMessage());
         }
     }
 
+    /**
+     * 登录验证处理
+     * @param array $map
+     * @param int $type
+     * @param array $param
+     * @return array
+     */
+    protected function checkLogin(array $map = [],int $type = 1,array $param = []): array
+    {
+        $user = (new SystemUser)->where($map)->findOrEmpty();
+        if ($user->isEmpty()) return [0,trans("error.user-empty"),[]];
+        if ($user['status'] <> 1) return [0,trans("error.user-status"),[]];
+        if ($user['type'] > 1) {
+            $typeUser = $this->getTypeUser($user['agent_id']);
+            if (empty($typeUser)) return [0,trans("empty.agent"),[]];
+            if ($typeUser['status'] <> 0) return [0,trans("error.agent"),[]];
+            if (time() > strtotime($typeUser['vip_end'])) return [0,trans("error.agent-out"),[]];
+            $user['shop_name'] = $typeUser['shop_name'];
+        }
+        if ($type == 2) {
+            if (md5(md5($param['password']).$user['salt']) <> $user['password']) return [0,trans("error.passwd"),[]];
+        }
+        $user->login_at = getDateFull();
+        $user->login_ip = request()->getRealIp();
+        $user->login_num = Db::raw("login_num+1");
+        $user->save();
+        return [1,'success',$user->toArray()];
+    }
+
+
+    /**
+     * 获取代理信息
+     * @param int $agentId
+     * @return array
+     */
+    protected function getTypeUser(int $agentId = 0): array
+    {
+        return (new SaasAgent)->where("agent_id",$agentId)->findOrEmpty()->toArray();
+    }
+
+
+    /**
+     * @return Response
+     */
+    #[Route(path: "profile",methods: "get"),Middleware(ExeMiddleware::class)]
+    public function getLoginUser(Request $request): Response
+    {
+        try {
+            $agent = (new SaasAgent)->where("agent_id",$request->uuid)->findOrEmpty();
+            return successTrans("success.data",[
+                "vip_at"    => empty($agent['vip_end'])?'无限期':date('Y-m-d',strtotime($agent['vip_end'])),
+                "agent_id"  => $agent['agent_id'],
+                "shop"      => $agent['shop_name']??'',
+                "address"   => $agent['shop_address']??'',
+                "sys"       => sConf("service.title"),
+                "logo"      => sConf("service.logo")
+            ]);
+        } catch (\Throwable $exception){
+            return error($exception->getMessage());
+        }
+    }
+
+
 }

+ 33 - 0
app/middleware/ExeMiddleware.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace app\middleware;
+
+use Shopwwi\WebmanAuth\Auth;
+use Shopwwi\WebmanAuth\JWT;
+use Webman\Http\Request;
+use Webman\Http\Response;
+use Webman\MiddlewareInterface;
+
+class ExeMiddleware implements MiddlewareInterface
+{
+
+    public function process(Request $request, callable $handler): Response
+    {
+        try {
+            $controller = new \ReflectionClass($request->controller);
+            $noNeedLogin = $controller->getDefaultProperties()['noNeedLogin']??[];
+            if (empty($noNeedLogin) || !in_array($request->action, $noNeedLogin)) {
+                $token =  $request->header("Authorization","");
+                if (empty($token)) return json(['code'=> 0,'msg'=> trans("error.request")]);
+                $uData = explode(" ",$token);
+                if (!isset($uData[1])) return json(['code'=> 0,'msg'=> trans("error.request")]);
+                $request->uuid = $uData[1];
+            }
+        } catch (\ReflectionException $exception) {
+            return json(['code'=> 500,'msg'=> $exception->getMessage()]);
+        }
+        $response = $request->method() == 'OPTIONS' ? response('',204) : $handler($request);
+        return $response;
+    }
+
+}

+ 2 - 2
app/wss/PrintWss.php

@@ -7,7 +7,7 @@ class PrintWss
 {
     public function onConnect(TcpConnection $connection)
     {
-        echo "onConnect\n";
+        echo "onConnect-111\n";
     }
 
     public function onWebSocketConnect(TcpConnection $connection, $http_buffer)
@@ -22,7 +22,7 @@ class PrintWss
 
     public function onClose(TcpConnection $connection)
     {
-        echo "onClose\n";
+        echo "onClose-2222\n";
     }
 
 }

+ 6 - 0
config/plugin/linfly/annotation/route.php

@@ -12,6 +12,12 @@ namespace LinFly\Annotation\Handle;
 
 use LinFly\Annotation\Bootstrap\AnnotationBootstrap;
 
+use Webman\Route;
+// 匹配所有options路由
+Route::options('[{path:.+}]', function (){
+    return response('',204);
+});
+
 if (!AnnotationBootstrap::isIgnoreProcess()) {
     RouteAnnotationHandle::createRoute();
 }

+ 1 - 1
config/route.php

@@ -13,7 +13,7 @@
  */
 
 use Webman\Route;
-
+Route::disableDefaultRoute();