Initial commit: Flutter 无书应用项目
This commit is contained in:
287
ht/tapi.php
Normal file
287
ht/tapi.php
Normal file
@@ -0,0 +1,287 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* 统一API接口
|
||||
* 支持POST和GET请求方式
|
||||
* 提供用户登录、注册、获取用户信息等功能
|
||||
*/
|
||||
|
||||
// 引入必要文件
|
||||
require_once 'inc/pubs.php';
|
||||
require_once 'inc/sqls.php';
|
||||
|
||||
// 设置响应头
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
header('Access-Control-Allow-Origin: *');
|
||||
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
|
||||
header('Access-Control-Allow-Headers: Content-Type, Authorization');
|
||||
|
||||
// 处理OPTIONS预检请求
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
|
||||
http_response_code(200);
|
||||
exit;
|
||||
}
|
||||
|
||||
// 获取请求参数(支持GET和POST)
|
||||
function getRequestParams() {
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
|
||||
return $_GET;
|
||||
} elseif ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
if (isset($_SERVER['CONTENT_TYPE']) && strpos($_SERVER['CONTENT_TYPE'], 'application/json') !== false) {
|
||||
$json = file_get_contents('php://input');
|
||||
return json_decode($json, true) ?: [];
|
||||
}
|
||||
return $_POST;
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
// 获取请求参数
|
||||
$params = getRequestParams();
|
||||
|
||||
// 获取操作类型
|
||||
$action = isset($params['act']) ? $params['act'] : '';
|
||||
|
||||
// 实例化数据库操作类
|
||||
$db = new DB();
|
||||
|
||||
// 根据操作类型执行相应操作
|
||||
switch ($action) {
|
||||
// 用户登录
|
||||
case 'login':
|
||||
handleLogin($params, $db);
|
||||
break;
|
||||
|
||||
// 用户注册
|
||||
case 'register':
|
||||
handleRegister($params, $db);
|
||||
break;
|
||||
|
||||
// 获取用户信息
|
||||
case 'getUserInfo':
|
||||
handleGetUserInfo($params, $db);
|
||||
break;
|
||||
|
||||
// 更新用户标识
|
||||
case 'updateUserIdentifier':
|
||||
handleUpdateUserIdentifier($params, $db);
|
||||
break;
|
||||
|
||||
// 用户登出
|
||||
case 'logout':
|
||||
handleLogout();
|
||||
break;
|
||||
|
||||
// 未知操作
|
||||
default:
|
||||
apiResponse(1, '未知操作');
|
||||
break;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理用户登录
|
||||
* @param array $params 请求参数
|
||||
* @param DB $db 数据库操作对象
|
||||
*/
|
||||
function handleLogin($params, $db) {
|
||||
// 获取参数
|
||||
$username = isset($params['username']) ? safeFilter($params['username']) : '';
|
||||
$password = isset($params['password']) ? $params['password'] : '';
|
||||
|
||||
// 参数验证
|
||||
if (empty($username) || empty($password)) {
|
||||
apiResponse(1, '账号和密码不能为空');
|
||||
}
|
||||
|
||||
// 查询用户
|
||||
$user = $db->getOne('users', "username = '$username'");
|
||||
|
||||
// 验证用户和密码
|
||||
if (!$user || !password_verify($password, $user['password'])) {
|
||||
apiResponse(1, '账号或密码错误');
|
||||
}
|
||||
|
||||
// 验证用户状态
|
||||
if ($user['status'] != 1) {
|
||||
apiResponse(1, '账号已被禁用,请联系管理员');
|
||||
}
|
||||
|
||||
// 更新最后登录时间
|
||||
$db->update('users', [
|
||||
'logtime' => date('Y-m-d H:i:s')
|
||||
], "id = {$user['id']}");
|
||||
|
||||
// 记录登录日志
|
||||
writeLog($user['id'], 'login', '用户登录');
|
||||
|
||||
// 存储session
|
||||
session_start();
|
||||
$_SESSION['user'] = $user;
|
||||
|
||||
// 移除敏感信息
|
||||
unset($user['password']);
|
||||
|
||||
apiResponse(0, '登录成功', $user);
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理用户注册
|
||||
* @param array $params 请求参数
|
||||
* @param DB $db 数据库操作对象
|
||||
*/
|
||||
function handleRegister($params, $db) {
|
||||
// 获取参数
|
||||
$username = isset($params['username']) ? safeFilter($params['username']) : '';
|
||||
$password = isset($params['password']) ? $params['password'] : '';
|
||||
$userIdentifier = isset($params['user_identifier']) ? safeFilter($params['user_identifier']) : '';
|
||||
|
||||
// 参数验证
|
||||
if (empty($username) || empty($password)) {
|
||||
apiResponse(1, '账号和密码不能为空');
|
||||
}
|
||||
|
||||
// 验证账号格式(手机号/邮箱/微信号)
|
||||
$phoneRegex = '/^1[3456789]\d{9}$/';
|
||||
$emailRegex = '/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/';
|
||||
$wechatRegex = '/^[a-zA-Z0-9_-]{6,20}$/';
|
||||
|
||||
if (!preg_match($phoneRegex, $username) && !preg_match($emailRegex, $username) && !preg_match($wechatRegex, $username)) {
|
||||
apiResponse(1, '请输入正确的手机号、邮箱或微信号');
|
||||
}
|
||||
|
||||
// 验证密码长度
|
||||
if (strlen($password) < 6) {
|
||||
apiResponse(1, '密码长度不能少于6位');
|
||||
}
|
||||
|
||||
// 检查用户名是否已存在
|
||||
$existUser = $db->getOne('users', "username = '$username'");
|
||||
if ($existUser) {
|
||||
apiResponse(1, '该账号已被注册');
|
||||
}
|
||||
|
||||
// 密码加密
|
||||
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
|
||||
|
||||
// 添加用户
|
||||
$userId = $db->insert('users', [
|
||||
'username' => $username,
|
||||
'password' => $hashedPassword,
|
||||
'irole' => 0, // 普通用户
|
||||
'status' => 1, // 正常状态
|
||||
'regtime' => date('Y-m-d H:i:s'),
|
||||
'user_identifier' => $userIdentifier
|
||||
]);
|
||||
|
||||
if (!$userId) {
|
||||
apiResponse(1, '注册失败,请稍后重试');
|
||||
}
|
||||
|
||||
// 记录注册日志
|
||||
writeLog($userId, 'register', '用户注册');
|
||||
|
||||
apiResponse(0, '注册成功');
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理获取用户信息
|
||||
* @param array $params 请求参数
|
||||
* @param DB $db 数据库操作对象
|
||||
*/
|
||||
function handleGetUserInfo($params, $db) {
|
||||
// 检查登录状态
|
||||
$user = checkLogin();
|
||||
if (!$user) {
|
||||
apiResponse(1, '请先登录');
|
||||
}
|
||||
|
||||
// 获取最新的用户信息
|
||||
$userInfo = $db->getOne('users', "id = {$user['id']}");
|
||||
|
||||
if (!$userInfo) {
|
||||
apiResponse(1, '用户不存在');
|
||||
}
|
||||
|
||||
// 移除敏感信息
|
||||
unset($userInfo['password']);
|
||||
|
||||
apiResponse(0, '获取成功', $userInfo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理更新用户标识
|
||||
* @param array $params 请求参数
|
||||
* @param DB $db 数据库操作对象
|
||||
*/
|
||||
function handleUpdateUserIdentifier($params, $db) {
|
||||
// 检查登录状态
|
||||
$user = checkLogin();
|
||||
if (!$user) {
|
||||
apiResponse(1, '请先登录');
|
||||
}
|
||||
|
||||
// 获取参数
|
||||
$userIdentifier = isset($params['user_identifier']) ? safeFilter($params['user_identifier']) : '';
|
||||
|
||||
// 验证用户标识长度
|
||||
if (strlen($userIdentifier) > 100) {
|
||||
apiResponse(1, '用户标识长度不能超过100个字符');
|
||||
}
|
||||
|
||||
// 更新用户标识
|
||||
$result = $db->update('users', [
|
||||
'user_identifier' => $userIdentifier
|
||||
], "id = {$user['id']}");
|
||||
|
||||
if (!$result) {
|
||||
apiResponse(1, '更新失败,请稍后重试');
|
||||
}
|
||||
|
||||
// 记录日志
|
||||
writeLog($user['id'], 'update_identifier', '更新用户标识');
|
||||
|
||||
// 获取更新后的用户信息
|
||||
$updatedUser = $db->getOne('users', "id = {$user['id']}");
|
||||
|
||||
// 移除敏感信息
|
||||
unset($updatedUser['password']);
|
||||
|
||||
// 更新session
|
||||
session_start();
|
||||
$_SESSION['user'] = $updatedUser;
|
||||
|
||||
apiResponse(0, '更新成功', $updatedUser);
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理用户登出
|
||||
*/
|
||||
function handleLogout() {
|
||||
session_start();
|
||||
|
||||
// 记录登出日志
|
||||
if (isset($_SESSION['user']) && !empty($_SESSION['user']['id'])) {
|
||||
writeLog($_SESSION['user']['id'], 'logout', '用户登出');
|
||||
}
|
||||
|
||||
// 清除session
|
||||
unset($_SESSION['user']);
|
||||
session_destroy();
|
||||
|
||||
apiResponse(0, '登出成功');
|
||||
}
|
||||
|
||||
/**
|
||||
* 统一API响应格式
|
||||
* @param int $code 状态码,0表示成功,非0表示失败
|
||||
* @param string $msg 提示信息
|
||||
* @param array $data 返回数据
|
||||
*/
|
||||
function apiResponse($code = 0, $msg = '', $data = []) {
|
||||
echo json_encode([
|
||||
'code' => $code,
|
||||
'msg' => $msg,
|
||||
'data' => $data
|
||||
], JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
Reference in New Issue
Block a user