From 6f30eedf4af57d865b89896843c30dd17e0c9569 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E6=B3=BD=E7=BD=91?= <”357099073@qq.com“> Date: Fri, 6 Jun 2025 22:36:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=BE=AE=E4=BF=A1=E6=89=AB?= =?UTF-8?q?=E7=A0=81=E7=99=BB=E9=99=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/index/controller/BaseController.php | 4 +- app/index/controller/WechatController.php | 142 ++++++++++---- app/index/view/user/login.php | 224 +++++++++++----------- 3 files changed, 225 insertions(+), 145 deletions(-) diff --git a/app/index/controller/BaseController.php b/app/index/controller/BaseController.php index ef15462..bd474c3 100644 --- a/app/index/controller/BaseController.php +++ b/app/index/controller/BaseController.php @@ -70,10 +70,10 @@ abstract class BaseController $userInfo = []; if (session('user_id')) { // 从数据库获取最新用户信息 - $user = Users::where('id', session('user_id'))->find(); + $user = Users::where('uid', session('user_id'))->find(); if ($user) { $userInfo = [ - 'id' => $user->id, + 'id' => $user->uid, 'name' => $user->name, 'account' => $user->account, 'avatar' => $user->avatar ?? '/static/images/avatar.png', diff --git a/app/index/controller/WechatController.php b/app/index/controller/WechatController.php index c0a7983..31c6091 100644 --- a/app/index/controller/WechatController.php +++ b/app/index/controller/WechatController.php @@ -5,7 +5,7 @@ use think\facade\Request; use think\facade\Log; use think\facade\Cache; use GuzzleHttp\Client; -use app\index\model\User; +use app\index\model\Users; use app\index\model\AdminConfig; class WechatController extends BaseController @@ -196,8 +196,11 @@ class WechatController extends BaseController $postStr = mb_convert_encoding($postStr, 'UTF-8', 'UTF-8,GBK,GB2312'); Log::info('微信消息原始数据:' . $postStr); - libxml_disable_entity_loader(true); - $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); + // 使用DOMDocument替代simplexml_load_string + $dom = new \DOMDocument(); + $dom->loadXML($postStr, LIBXML_NOCDATA | LIBXML_NOBLANKS); + $postObj = simplexml_import_dom($dom); + if ($postObj === false) { Log::error('微信消息:XML解析失败'); return ''; @@ -278,47 +281,112 @@ class WechatController extends BaseController if (isset($userInfo['openid'])) { // 保存用户信息到数据库 - $user = User::where('openid', $fromUsername)->find(); + $user = Users::where('openid', $fromUsername)->find(); if (!$user) { - $user = new User; + $user = new Users; $user->openid = $fromUsername; - $user->name = $userInfo['nickname'] ?? ''; - $user->avatar = $userInfo['headimgurl'] ?? ''; - $user->save(); - Log::info('创建新用户成功', ['user' => $user->toArray()]); + // 生成默认账号 + $defaultAccount = 'wx_' . substr(md5($fromUsername), 0, 8); + $user->account = $defaultAccount; + $user->name = $defaultAccount; // 将默认账号同时设置为用户名 + // 设置头像,确保有值 + $user->avatar = !empty($userInfo['headimgurl']) ? $userInfo['headimgurl'] : '/static/images/avatar.png'; + // 生成随机密码 + $user->password = md5(uniqid() . rand(1000, 9999)); + $user->create_time = time(); // 设置创建时间 + $user->login_count = 1; // 首次登录,设置登录次数为1 + if (!$user->save()) { + Log::error('创建用户失败:' . json_encode($user->getError(), JSON_UNESCAPED_UNICODE)); + return 'success'; + } + // 重新获取用户信息以确保获取到uid + $user = Users::where('openid', $fromUsername)->find(); + if (!$user) { + Log::error('获取新创建的用户信息失败'); + return 'success'; + } + Log::info('创建新用户成功:' . json_encode($user->toArray(), JSON_UNESCAPED_UNICODE)); } else { // 更新用户信息 - $user->name = $userInfo['nickname'] ?? $user->name; - $user->avatar = $userInfo['headimgurl'] ?? $user->avatar; - $user->save(); - Log::info('更新用户信息成功', ['user' => $user->toArray()]); + $needUpdate = false; + + // 只在用户名为空时设置 + if (empty($user->name)) { + $user->name = $user->account; + $needUpdate = true; + } + + // 只在头像为空或为默认头像时更新 + if (empty($user->avatar) || $user->avatar === '/static/images/avatar.png') { + if (!empty($userInfo['headimgurl'])) { + $user->avatar = $userInfo['headimgurl']; + $needUpdate = true; + } elseif (empty($user->avatar)) { + $user->avatar = '/static/images/avatar.png'; + $needUpdate = true; + } + } + + // 增加登录次数 + $user->login_count = $user->login_count + 1; + $needUpdate = true; + + // 只在需要更新时才更新时间戳 + if ($needUpdate) { + $user->update_time = time(); + if (!$user->save()) { + Log::error('更新用户信息失败:' . json_encode($user->getError(), JSON_UNESCAPED_UNICODE)); + return 'success'; + } + Log::info('更新用户信息成功:' . json_encode($user->toArray(), JSON_UNESCAPED_UNICODE)); + } } // 更新票据文件 - $data['user_info'] = [ - 'uid' => $user->uid, + $data = [ + 'uid' => (int)$user->uid, // 确保uid是整数 'name' => $user->name, - 'avatar' => $user->avatar, - 'openid' => $user->openid + 'avatar' => $user->avatar ?: '/static/images/avatar.png', // 确保avatar不为空 + 'openid' => $user->openid, + 'user_account' => $user->account, + 'user_password' => $user->password, + 'expire_time' => time() + (7 * 24 * 3600), // 7天过期 + 'is_auto_login' => true, + 'login_status' => 'success' ]; - $data['login_status'] = 'success'; if (file_put_contents($file, json_encode($data, JSON_UNESCAPED_UNICODE)) === false) { Log::error('更新票据文件失败:' . $file); } else { - Log::info('更新票据文件成功'); + Log::info('更新票据文件成功:' . json_encode($data, JSON_UNESCAPED_UNICODE)); } // 设置登录session - session('user_id', $user->uid); - session('user_info', $data['user_info']); + session('user_id', (int)$user->uid); // 确保session中的uid是整数 + session('user_name', $user->name); + session('user_avatar', $user->avatar ?: '/static/images/avatar.png'); + session('user_account', $user->account); session('openid', $user->openid); + + // 设置cookie + $expire = 7 * 24 * 3600; // 7天过期 + cookie('user_account', $user->account, ['expire' => $expire]); + cookie('user_avatar', $user->avatar ?: '/static/images/avatar.png', ['expire' => $expire]); + cookie('user_name', $user->name, ['expire' => $expire]); + cookie('open_id', $user->openid, ['expire' => $expire]); - Log::info('用户登录成功', [ - 'uid' => $user->uid, + Log::info('用户登录成功:' . json_encode([ + 'uid' => (int)$user->uid, 'name' => $user->name, - 'openid' => $user->openid - ]); + 'openid' => $user->openid, + 'account' => $user->account, + 'cookies' => [ + 'user_account' => $user->account, + 'user_avatar' => $user->avatar, + 'user_name' => $user->name, + 'open_id' => $user->openid + ] + ], JSON_UNESCAPED_UNICODE)); } else { Log::error('获取用户信息失败:' . json_encode($userInfo, JSON_UNESCAPED_UNICODE)); } @@ -603,20 +671,17 @@ class WechatController extends BaseController return json(['code' => 0, 'msg' => '等待扫码']); } - // 检查是否已经获取用户信息 - if (!isset($loginData['user_info'])) { - return json(['code' => 0, 'msg' => '正在获取用户信息,请稍候...']); - } - // 检查登录状态 if (!isset($loginData['login_status']) || $loginData['login_status'] !== 'success') { return json(['code' => 0, 'msg' => '正在处理登录,请稍候...']); } // 登录成功,设置session - session('user_id', $loginData['user_info']['uid']); - session('user_info', $loginData['user_info']); - session('openid', $loginData['user_info']['openid']); + session('user_id', $loginData['uid']); + session('user_name', $loginData['name']); + session('user_avatar', $loginData['avatar']); + session('user_account', $loginData['user_account']); + session('openid', $loginData['openid']); // 删除临时文件 @unlink($file); @@ -626,7 +691,14 @@ class WechatController extends BaseController 'code' => 1, 'msg' => '登录成功', 'data' => [ - 'user_info' => $loginData['user_info'] + 'uid' => $loginData['uid'], + 'name' => $loginData['name'], + 'avatar' => $loginData['avatar'], + 'openid' => $loginData['openid'], + 'user_account' => $loginData['user_account'], + 'user_password' => $loginData['user_password'], + 'expire_time' => $loginData['expire_time'], + 'is_auto_login' => $loginData['is_auto_login'] ] ]); @@ -646,7 +718,7 @@ class WechatController extends BaseController try { // 这里需要根据你的用户表结构来实现 // 示例:从用户表中查询openid对应的用户信息 - $user = User::where('openid', $openid)->find(); + $user = Users::where('openid', $openid)->find(); if ($user) { return $user->toArray(); } diff --git a/app/index/view/user/login.php b/app/index/view/user/login.php index e9fb303..ac9c7cd 100644 --- a/app/index/view/user/login.php +++ b/app/index/view/user/login.php @@ -207,12 +207,12 @@