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