LiuJ hai 4 meses
pai
achega
8ecfbfad95
Modificáronse 2 ficheiros con 136 adicións e 116 borrados
  1. 24 10
      app/Controller/IndexController.php
  2. 112 106
      app/Controller/LoginController.php

+ 24 - 10
app/Controller/IndexController.php

@@ -20,7 +20,8 @@ class IndexController extends AbstractController
     #[Inject]
     protected ValidatorFactoryInterface $validationFactory;
 
-    public function index(RequestInterface $request){
+    public function index(RequestInterface $request)
+    {
         $validator = $this->validationFactory->make(
             $request->all(),
             [
@@ -33,7 +34,7 @@ class IndexController extends AbstractController
             ]
         );
 
-        if ($validator->fails()){
+        if ($validator->fails()) {
             // Handle exception
             $errorMessage = $validator->errors()->first();
             var_dump($errorMessage);
@@ -60,23 +61,36 @@ class IndexController extends AbstractController
         $img_code = $result->getImageCode();
         $code_uniqid = uniqid("code");
         //写入缓存 用于其他方法验证 并且设置过期时间
-        $redis->set($code_uniqid,$img_code,60000);
+        $redis->set($code_uniqid, $img_code, 60000);
+        //删除掉所有code_uniqid
+        $redis->del($code_uniqid);
+        $iterator = null;
+        do {
+            $keys = $redis->scan($iterator, "code*");
+            var_dump($keys, '---1');
+            if ($keys) {
+                foreach ($keys as $key) {
+                    $redis->del($key);
+                }
+            }
+        } while ($iterator > 0);
+
 
-        return $result?Result::success(['code'=>$code_uniqid,'img'=>$result->getImageBase64()]):Result::error('失败');
-//        return $result->getImageBase64();
+        return $result ? Result::success(['code' => $code_uniqid, 'img' => $result->getImageBase64()]) : Result::error('失败');
+        //        return $result->getImageBase64();
 
     }
 
-// test
-      /**
+    // test
+    /**
      * 获取验证码
      */
-    public function getverifyCode(){
+    public function getverifyCode()
+    {
         $comm = new CommonService();
         $ip = $comm->userIp();
         $redis = $this->container->get(\Hyperf\Redis\Redis::class);
-        $img_code  =  $redis->get('code'.$ip);
+        $img_code  =  $redis->get('code' . $ip);
         return Result::success($img_code);
     }
-
 }

+ 112 - 106
app/Controller/LoginController.php

@@ -1,5 +1,7 @@
 <?php
-declare (strict_types = 1);
+
+declare(strict_types=1);
+
 namespace App\Controller;
 
 use App\JsonRpc\UserServiceInterface;
@@ -19,6 +21,7 @@ use Hyperf\HttpServer\Response;
 use Hyperf\HttpMessage\Cookie\Cookie;
 use App\Controller\UserController;
 use App\JsonRpc\WebsiteServiceInterface;
+
 /**
  * @AutoController()
  */
@@ -27,7 +30,7 @@ class LoginController extends AbstractController
 
     #[Inject]
     protected ValidatorFactoryInterface $validationFactory;
-//    protected JWT $JWT;
+    //    protected JWT $JWT;
     /**
      * @var UserServiceInterface
      */
@@ -41,11 +44,11 @@ class LoginController extends AbstractController
     /**
      * @var Response
      */
-//    private $response;
-//    public function __construct(Jwt $JWT)
-//    {
-//        $this->JWT = $JWT;
-//    }
+    //    private $response;
+    //    public function __construct(Jwt $JWT)
+    //    {
+    //        $this->JWT = $JWT;
+    //    }
     public function login(Jwt $jwt)
     {
 
@@ -92,23 +95,23 @@ class LoginController extends AbstractController
             return Result::error("用户不存在");
         }
 
-        if($userInfos['data']['status']==0){
+        if ($userInfos['data']['status'] == 0) {
             return Result::error("用户已经冻结");
         }
 
         if (md5(md5($reqData['password']) . $userInfos['data']['salt']) != $userInfos['data']['password']) {
             return Result::error("登陆密码错误");
         }
-        if($userInfos['data']['type_id']!=10000){
+        if ($userInfos['data']['type_id'] != 10000) {
             $authData = [
 
-                'id'=>$userInfos['data']['sszq'],
-                'SiteId'=>Context::get("SiteId")
+                'id' => $userInfos['data']['sszq'],
+                'SiteId' => Context::get("SiteId")
             ];
-            var_dump("参数:",$authData);
+            var_dump("参数:", $authData);
             $resultAuth =  $this->checkUserAuth($authData);
 
-            if(!$resultAuth){
+            if (!$resultAuth) {
                 return Result::error("您没有权限登陆此网站");
             }
         }
@@ -119,6 +122,10 @@ class LoginController extends AbstractController
             'email' => $userInfos['data']['email'],
             'level_id' => $userInfos['data']['level_id'],
             'type_id' => $userInfos['data']['type_id'],
+            'metadata' => [
+                'user_id' => $userInfos['data']['id'] ?? 0,
+            ],
+            'iss' => 'web', // 与 Go 系统保持一致
         ];
         // 使用默认场景登录
         $token = $jwt->getToken('default', $userData);
@@ -128,19 +135,18 @@ class LoginController extends AbstractController
             $jwt->logout($old_token->token);
             try {
                 $jwt->verifyToken($old_token->token);
-            }catch (\Exception $exception){
+            } catch (\Exception $exception) {
                 $code = $exception->getCode();
-                if ($code== 400) {
+                if ($code == 400) {
                     $new_token = UserToken::where('user_id', $userData['uid'])->update(['token' => $token->toString()]);
                     if (empty($new_token)) {
                         return Result::error("Token过期失败!");
                     }
-
-                } else{
+                } else {
                     return Result::error("Token过期失败!");
                 }
             }
-        }else{
+        } else {
             $usernew_token = $token->toString();
             $user_token =  UserToken::create([
                 'user_id' => $userData['uid'],
@@ -150,8 +156,20 @@ class LoginController extends AbstractController
                 return Result::error("登录失败!");
             }
         }
+        $claims = [
+            'iss' => 'web', // 与 Go 系统保持一致
+            'metadata' => [
+                'user_id' => $userInfos['data']['id'] ?? 0,
+            ],
+            // 可以保留其他字段,但要确保 Go 系统也能处理
+            // 'exp' => time() + 3600,
+            // 'iat' => time(),
+            // 'jti' => md5(uniqid($userInfos['data']['id'] . $userInfos['data']['mobile'] ?? '', true)),
+        ];
+        $token_im = $jwt->getToken('default', $claims);
         $data = [
             'token' => $token->toString(),
+            'token_im' => $token_im->toString(),
             'exp' => $jwt->getTTL($token->toString()),
         ];
         return Result::success($data);
@@ -252,7 +270,7 @@ class LoginController extends AbstractController
         $checkUserInfo = $this->userServiceClient->verifyUserInfo([
             'user_name' => $response['phone_info']['purePhoneNumber'],
         ]);
-        var_dump("检测返回值用户信息:",$checkUserInfo);
+        var_dump("检测返回值用户信息:", $checkUserInfo);
         if ($checkUserInfo['code'] == 0) {
             $salt = rand(1, 999999);
             $createUserData = [
@@ -260,14 +278,14 @@ class LoginController extends AbstractController
                 'salt' => $salt,
                 'password' => $openInfoData['openid'],
                 'type_id' => 20000,
-                'mobile'=>$response['phone_info']['purePhoneNumber'],
-                'other'=>[],
-                'city_arr_id'=>[],
-                'address_arr_id'=>[]
+                'mobile' => $response['phone_info']['purePhoneNumber'],
+                'other' => [],
+                'city_arr_id' => [],
+                'address_arr_id' => []
             ];
             $checkUserInfo = $this->userServiceClient->createUser($createUserData);
         }
-        var_dump("返回值用户信息:",$checkUserInfo);
+        var_dump("返回值用户信息:", $checkUserInfo);
         //根据openid和手机号判断是否注册,未注册直接注册
         $wechatReqData = [
             'openid' => $openInfoData['openid'],
@@ -283,7 +301,7 @@ class LoginController extends AbstractController
                 'watermark' => json_encode($response['phone_info']['watermark']),
                 'user_id' => $checkUserInfo['data']['id'] ?? 0,
             ];
-            var_dump("##插入的值:",$wechatData);
+            var_dump("##插入的值:", $wechatData);
             $this->userServiceClient->addWechatInfo($wechatData);
         }
         var_dump($checkUserInfo);
@@ -292,7 +310,7 @@ class LoginController extends AbstractController
             'user_name' => $response['phone_info']['phoneNumber'] ?? '',
             'mobile' => $checkUserInfo['data']['mobile'] ?? '',
             'email' => $checkUserInfo['data']['email'] ?? '',
-//            'rong_token' => $userInfos['data']['rong_token'],
+            //            'rong_token' => $userInfos['data']['rong_token'],
             'level_id' => $checkUserInfo['data']['level_id'] ?? '',
             'type_id' => $checkUserInfo['data']['type_id'] ?? '',
         ];
@@ -303,7 +321,6 @@ class LoginController extends AbstractController
             'exp' => $jwt->getTTL($token->toString()),
         ];
         return Result::success($data);
-
     }
     public function getToken(JWT $jwt)
     {
@@ -327,17 +344,14 @@ class LoginController extends AbstractController
         return Result::success($token->toString());
     }
 
-    public function httpPost()
-    {
-
-    }
+    public function httpPost() {}
     # http头部必须携带token才能访问的路由
     public function getData(Jwt $jwt)
     {
-//        var_dump($this->UserId);
+        //        var_dump($this->UserId);
         $h = $this->request->getHeaders();
-//        var_dump($this->request->getHeaders());
-//        $a= 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJwaHBlcjY2Ni9qd3QiLCJ1aWQiOjMyLCJ1c2VyX25hbWUiOiIxIiwicm9sZV9pZCI6MSwibW9iaWxlIjoiMTU4MDEyNDU3NTUiLCJlbWFpbCI6IjVAcXEuY29tIiwicm9uZ190b2tlbiI6IiIsImxldmVsX2lkIjo4LCJqd3Rfc2NlbmUiOiJkZWZhdWx0IiwianRpIjoiZGVmYXVsdF82Njc1MjJkZDQ3YWYxMi41MTE5MjI5MiIsImlhdCI6MTcxODk1MjY2OSwibmJmIjoxNzE4OTUyNjY5LCJleHAiOjE3MjE1NDQ2Njl9.e0JW8fgNrwBdFgmQ8GNtES2ME1SbcbIih5MsQWzT6sk';
+        //        var_dump($this->request->getHeaders());
+        //        $a= 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJwaHBlcjY2Ni9qd3QiLCJ1aWQiOjMyLCJ1c2VyX25hbWUiOiIxIiwicm9sZV9pZCI6MSwibW9iaWxlIjoiMTU4MDEyNDU3NTUiLCJlbWFpbCI6IjVAcXEuY29tIiwicm9uZ190b2tlbiI6IiIsImxldmVsX2lkIjo4LCJqd3Rfc2NlbmUiOiJkZWZhdWx0IiwianRpIjoiZGVmYXVsdF82Njc1MjJkZDQ3YWYxMi41MTE5MjI5MiIsImlhdCI6MTcxODk1MjY2OSwibmJmIjoxNzE4OTUyNjY5LCJleHAiOjE3MjE1NDQ2Njl9.e0JW8fgNrwBdFgmQ8GNtES2ME1SbcbIih5MsQWzT6sk';
         $arr = $jwt->getClaimsByToken($h['token'][0]);
         // var_dump($h['token'][0], "+++++++++++", $arr, "===####");
         return $this->response->json(['code' => 0, 'msg' => 'success', 'data' => ['a' => 1]]);
@@ -349,20 +363,20 @@ class LoginController extends AbstractController
      */
     public function checkUserAuth($data)
     {
-//        var_dump("进没进来呢::",$data);
+        //        var_dump("进没进来呢::",$data);
         $websiteGroup = [
-            'id'=>$data['id']
+            'id' => $data['id']
         ];
         $result = $this->userServiceClient->getWebsiteGroupInfo($websiteGroup);
-//        var_dump("checkUserAuth:",$result);
-        if($result['code']==200){
-            if($data['SiteId'] && $result['data']['web_ids']){
-                if(in_array($data['SiteId'],json_decode($result['data']['web_ids'],true))){
+        var_dump("checkUserAuth:", $result);
+        if ($result['code'] == 200) {
+            if ($data['SiteId'] && $result['data']['web_ids']) {
+                if (in_array($data['SiteId'], json_decode($result['data']['web_ids'], true))) {
                     return true;
-                }else{
+                } else {
                     return false;
                 }
-            }else{
+            } else {
                 return false;
             }
         }
@@ -380,7 +394,7 @@ class LoginController extends AbstractController
         $header = $this->request->getHeader('userurl');
         $origin = $header[0];
         $logindevice = explode("//", $origin);
-        if(!isset($logindevice[1]) && !$logindevice[1]){
+        if (!isset($logindevice[1]) && !$logindevice[1]) {
             return Result::error('userurl不存在,请登录');
         }
         $reqData = $this->request->all();
@@ -400,20 +414,20 @@ class LoginController extends AbstractController
         try {
             $jwt->verifyToken($reqData['token']);
             $results = $this->checkAuth([
-                'token'=>$reqData['token'],
-                'userurl'=>$logindevice[1]
+                'token' => $reqData['token'],
+                'userurl' => $logindevice[1]
             ]);
-            if($results['code']==200){
+            if ($results['code'] == 200) {
                 return Result::success(['isLogin' => true]);
-            }elseif($results['code']==-1){
-                return Result::error("没有权限登陆".$logindevice[1]."这个域名",-1);
-            }elseif($results['code']==-2){
-                return Result::error("token已过期",-2);
-            }else{
+            } elseif ($results['code'] == -1) {
+                return Result::error("没有权限登陆" . $logindevice[1] . "这个域名", -1);
+            } elseif ($results['code'] == -2) {
+                return Result::error("token已过期", -2);
+            } else {
                 return Result::error("参数错误");
             }
-        }catch(\Exception $e){
-            return Result::error('token已过期:'.$e->getMessage(),-2);
+        } catch (\Exception $e) {
+            return Result::error('token已过期:' . $e->getMessage(), -2);
         }
     }
 
@@ -441,9 +455,9 @@ class LoginController extends AbstractController
         $redis = $this->container->get(\Hyperf\Redis\Redis::class);
         $ticket = md5($reqData['token']);
 
-        $res = $redis->set('ticket:' . $ticket, $reqData['token'],  3600*24);
-        if ($res){
-            return Result::success(['ticket' => $ticket ,'isSave' => 1]);
+        $res = $redis->set('ticket:' . $ticket, $reqData['token'],  3600 * 24);
+        if ($res) {
+            return Result::success(['ticket' => $ticket, 'isSave' => 1]);
         } else {
             return Result::error('存储失败');
         }
@@ -471,12 +485,12 @@ class LoginController extends AbstractController
         if ($redis->exists('ticket:' . $ticket)) {
             $res = $redis->del('ticket:' . $ticket);
             if (!!$res && $res == 1) $isDel = 1;
-        }else{
+        } else {
             $isDel = 1;
         }
         try {
             $jwt->logout($reqData['token']);
-        }catch (\Exception $e){
+        } catch (\Exception $e) {
             return Result::success(['isDel' => $isDel]);
         }
         return Result::success(['isDel' => $isDel]);
@@ -500,42 +514,38 @@ class LoginController extends AbstractController
         if (empty($theHost)) {
             return Result::error('系统配置错误:THE_HOST 未定义');
         }
-        var_dump("admintoken:",$adminToken);
+        var_dump("admintoken:", $adminToken);
         // 如果存在 adminToken,则进行登录校验
         if (!empty($adminToken)) {
             // 处理登录
             $redis = $this->container->get(\Hyperf\Redis\Redis::class);
-            var_dump("ticket1111:",$ticket);
-            if(!empty($ticket)){
+            var_dump("ticket1111:", $ticket);
+            if (!empty($ticket)) {
                 if (!empty($ticket) && $redis->exists('ticket:' . $ticket)) {
-                    if(isset($reqData['userurl']) && $reqData['userurl']){
+                    if (isset($reqData['userurl']) && $reqData['userurl']) {
                         $resultR = $this->checkAuth([
-                            'token'=>$redis->get('ticket:' . $ticket),
-                            'userurl'=>$reqData['userurl']
+                            'token' => $redis->get('ticket:' . $ticket),
+                            'userurl' => $reqData['userurl']
                         ]);
-                        if($resultR['code']==-1){
-                            return $this->response->redirect($this->fun_http('http://'.$theHost.'/#/loginAlert'), 302);
+                        if ($resultR['code'] == -1) {
+                            return $this->response->redirect($this->fun_http('http://' . $theHost . '/#/loginAlert'), 302);
                         }
-                    }else{
+                    } else {
                         $backurl = rtrim($backurl, '/');
                         return $this->response->redirect($this->fun_http($backurl . '?ticket=' . $ticket . '&admintoken=' . urlencode($adminToken)), 302);
                     }
-
-
-                }else{
+                } else {
                     var_dump("222222222:");
-                    return $this->response->redirect($this->fun_http('http://'.$theHost.'/#/login?backurl='.urlencode($backurl)), 302);
+                    return $this->response->redirect($this->fun_http('http://' . $theHost . '/#/login?backurl=' . urlencode($backurl)), 302);
                 }
-
-            }else{
+            } else {
                 $ticket = md5($adminToken);
             }
             var_dump("333333333333333:");
             return $this->response->redirect($this->fun_http($backurl . '?ticket=' . $ticket . '&admintoken=' . urlencode($adminToken)), 302);
-
-        }else{
+        } else {
             var_dump("444444444444444:");
-            return $this->response->redirect($this->fun_http('http://'.$theHost.'/#/login?backurl='.urlencode($backurl)), 302);
+            return $this->response->redirect($this->fun_http('http://' . $theHost . '/#/login?backurl=' . urlencode($backurl)), 302);
         }
     }
 
@@ -572,8 +582,8 @@ class LoginController extends AbstractController
         $backurl = rtrim($backurl, '/');
         $redirectUrl = $this->fun_http($backurl . '?ticket=' . $ticket . '&admintoken=' . urlencode($adminToken));
 
-//        $loginUrl = 'http://' . $theHost . '/#/login?backurl=' . urlencode($backurl);
-//        return $this->response->redirect($loginUrl, 302);
+        //        $loginUrl = 'http://' . $theHost . '/#/login?backurl=' . urlencode($backurl);
+        //        return $this->response->redirect($loginUrl, 302);
         return $this->response->redirect($redirectUrl, 302);
     }
 
@@ -624,14 +634,13 @@ class LoginController extends AbstractController
         // 获取所有 Cookie
         $cookies = $this->request->getCookieParams();
         var_dump("获取cookie:", $cookies);
-        if($cookies){
+        if ($cookies) {
             foreach ($cookies as $name => $value) {
-                if($name){
+                if ($name) {
                     $expire = time() - 3600; // 设置过期时间为过去的时间
                     $cookie = new Cookie((string)$name, '', $expire, '/');
                     $this->response = $this->response->withCookie($cookie);
                 }
-
             }
         }
         try {
@@ -654,7 +663,7 @@ class LoginController extends AbstractController
     {
 
         $reqData = $this->request->all();
-        var_dump("===============接收参数:",$reqData);
+        var_dump("===============接收参数:", $reqData);
         $validator = $this->validationFactory->make(
             $reqData,
             [
@@ -672,19 +681,19 @@ class LoginController extends AbstractController
         }
         $redis = $this->container->get(\Hyperf\Redis\Redis::class);
         $ticket = md5($reqData['token']);
-        $res = $redis->set('ticket:' . $ticket, $reqData['token'],  3600*24);
-        var_dump("===============返回值:",$res);
-        $expire = time()+3600*24;
+        $res = $redis->set('ticket:' . $ticket, $reqData['token'],  3600 * 24);
+        var_dump("===============返回值:", $res);
+        $expire = time() + 3600 * 24;
         $cookieName = 'Admin-Token';
         // 创建 Cookie 实例
         $cookie = new Cookie($cookieName, $reqData['token'], $expire, '/');
         // 清空 Cookie
         $r = $this->response = $this->response->withCookie($cookie);
         var_dump("设置token:", $r);
-        if($res && !empty($ticket)){
+        if ($res && !empty($ticket)) {
             $url = $reqData['backurl'] . '/?ticket=' . $ticket . '&admintoken=' . urlencode($reqData['token']);
             $url = $this->fun_http($url);
-            var_dump("跳转地址gogo:",$url);
+            var_dump("跳转地址gogo:", $url);
             return $this->response->redirect($url, 302);
         }
     }
@@ -699,19 +708,19 @@ class LoginController extends AbstractController
     public function checkAuth($data)
     {
         $jwt = new JWT();
-        $ver =$jwt->getClaimsByToken($data['token']);
+        $ver = $jwt->getClaimsByToken($data['token']);
         $tokenTime =  $jwt->getTokenDynamicCacheTime($data['token']);
-        if($tokenTime==0){
-            return Result::error("token已过期,请重新登录",-2);
+        if ($tokenTime == 0) {
+            return Result::error("token已过期,请重新登录", -2);
         }
-        if(isset($data['userurl']) && $data['userurl']){
-            $result = $this->websiteServiceClient->getWebsiteId(['website_url'=>$data['userurl']]);
-            if(!isset($result['data']['id']) || !$result['data']['id']){
-                return Result::error("网站不存在...",-2);
+        if (isset($data['userurl']) && $data['userurl']) {
+            $result = $this->websiteServiceClient->getWebsiteId(['website_url' => $data['userurl']]);
+            if (!isset($result['data']['id']) || !$result['data']['id']) {
+                return Result::error("网站不存在...", -2);
             }
-            if($ver['type_id']!=10000){
+            if ($ver['type_id'] != 10000) {
                 $userInfo = $this->userServiceClient->getUserInfo($ver['uid']);
-                if($userInfo['code'] == 200 && isset($userInfo['data']) && !empty($userInfo['data']['sszq'])){
+                if ($userInfo['code'] == 200 && isset($userInfo['data']) && !empty($userInfo['data']['sszq'])) {
                     $sszq = $userInfo['data']['sszq'];
                     //组id
                     $authData = [
@@ -722,21 +731,18 @@ class LoginController extends AbstractController
                     $resultAuth = $this->checkUserAuth($authData);
                     if (!$resultAuth) {
                         // 如果没有权限,返回错误响应
-                        return Result::error("没有权限登陆此网站...",-1);
-                    }else{
+                        return Result::error("没有权限登陆此网站...", -1);
+                    } else {
                         return Result::success([]);
                     }
-                }else{
-                    return Result::error("用户没有群组...",-2);
+                } else {
+                    return Result::error("用户没有群组...", -2);
                 }
-            }else{
+            } else {
                 return Result::success([]);
             }
-        }else{
-            return Result::error("userurl不能为空...",-2);
+        } else {
+            return Result::error("userurl不能为空...", -2);
         }
-
     }
-
-
 }