php+mongodb+vue实现注册登录多用户笔记系统代码
代码语言:php
所属分类:其他
代码描述:php+mongodb+vue实现注册登录多用户笔记系统代码
代码标签: php mongodb vue 注册 登录 多用户 笔记 系统 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<?php // ################################################################## // # 错误与异常日志记录器(保存到单独文件) // ################################################################## function log_fatal_error() { $error = error_get_last(); if ($error && in_array($error['type'], [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR])) { $message = "[" . date('c') . "] [FATAL] {$error['message']} in {$error['file']} on line {$error['line']}\n"; $logFile = __DIR__ . '/mongo_ui_errors.log'; error_log($message, 3, $logFile); } } function log_uncaught_exception($exception) { $message = "[" . date('c') . "] [EXCEPTION] " . $exception->getMessage() . " in " . $exception->getFile() . " on line " . $exception->getLine() . "\nStack trace:\n" . $exception->getTraceAsString() . "\n"; $logFile = __DIR__ . '/mongo_ui_errors.log'; error_log($message, 3, $logFile); // 在API请求中,返回JSON错误;否则显示HTML错误 if (!empty($_REQUEST['action'])) { json_response(['success' => false, 'message' => '系统发生内部错误,请联系管理员'], 500); } else { http_response_code(500); echo "<h2>系统发生内部错误,请查看日志。</h2>"; } exit; } // **修复 1:激活错误与异常处理器** register_shutdown_function('log_fatal_error'); set_exception_handler('log_uncaught_exception'); // **修复 2:更安全的 Session 启动** if (session_status() === PHP_SESSION_NONE) { session_start(); } // --- 安全设置 --- define('DB_USER', ''); // 数据库账号 define('DB_PWD', ''); // 数据库密码 define('DB_NAME', ''); // // --- API 路由 --- if (isset($_REQUEST['action'])) { handle_api(); } function handle_api() { $action = $_REQUEST['action']; // **修复 3:将 'me' 添加到需要认证的操作列表** $authActions = ['list', 'get', 'save', 'delete', 'search', 'me', 'change_password']; $userActions = ['register', 'login', 'logout']; if (in_array($action, $userActions)) { try { call_user_func("api_$action"); } catch (Exception $e) { json_response(['success' => false, 'message' => $e->getMessage()], 400); // 通常是客户端输入错误 } return; } // 需要登录的操作 if (!isset($_SESSION['user_id'])) { json_response(['success' => false, 'message' => '未登录或会话已过期'], 401); } if (!in_array($action, $authActions)) { json_response(['success' => false, 'message' => '无效操作'], 400); } try { call_user_func("api_$action"); } catch (Exception $e) { json_response(['success' => false, 'message' => $e->getMessage()], 500); // 通常是服务器端错误 } } function get_manager() { $dsn = "mongodb://"; if (DB_USER && DB_PWD) { $dsn .= DB_USER . ':' . DB_PWD . '@'; } $dsn .= "127.0.0.1:27017/" . DB_NAME; try { return new MongoDB\Driver\Manager($dsn); } catch (MongoDB\Driver\Exception\Exception $e) { throw new Exception("数据库连接失败: " . $e->getMessage()); } } function json_response($data, $code = 200) { http_response_code($code); header('Content-Type: application/json; charset=utf-8'); echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); exit; } function format_note_document($doc) { if (!$doc) return null; $arr = json_decode(json_encode($doc), true); $arr['id'] = (string)($doc->_id ?? ''); if (isset($doc->createdAt)) { $arr['createdAt'] = date('c', $doc->createdAt->toDateTime()->getTimestamp()); } if (isset($doc->updatedAt)) { $arr['updatedAt'] = date('c', $doc->updatedAt->toDateTime()->getTimestamp()); } unset($arr['_id'], $arr['userId']); return $arr; } // ================== 用户系统 ================== // **修复 3:新增 api_me 函数** function api_me() { if (isset($_SESSION['user_id'])) { json_response([ 'success' => true, 'data' => [ 'id' => $_SESSION['user_id'], 'username' => $_SESSION['username'] ] ]); } else { json_response(['success' => false, 'message' => '未登录'], 401); } } function api_register() { $input = json_decode(file_get_contents('php://input'), true); $username = trim($input['username'] ?? ''); $password = $input['password'] ?? ''; if (!$username || !$password) { throw new Exception('用户名和密码不能为空'); } if (strlen($password) < 6) { throw new Exception('密码至少6位'); } $manager = get_manager(); $query = new MongoDB\Driver\Query(['username' => $username]); $cursor = $manager->executeQuery(DB_NAME . '.users', $query); if (count($cursor->toArray()) > 0) { throw new Exception('用户名已存在'); } $bulk = new MongoDB\Driver\BulkWrite(); $bulk->insert([ 'username' => $username, 'password' => password_has.........完整代码请登录后点击上方下载按钮下载查看
网友评论0