feat(auth): 实现登录注册功能并重构 App 组件
- 新增登录和注册页面组件
- 实现用户认证和权限管理逻辑
- 重构 App 组件,使用 Router 和 AuthProvider
- 添加管理员面板和论坛页面组件
Change-Id: Iaa4502616970e75e3268537f73c75dac8f60e24d
diff --git a/src/features/auth/services/authApi.js b/src/features/auth/services/authApi.js
new file mode 100644
index 0000000..dd40a80
--- /dev/null
+++ b/src/features/auth/services/authApi.js
@@ -0,0 +1,165 @@
+// src/features/auth/services/authApi.js
+import request from "../../../services/request";
+import { message } from "antd";
+
+// 使用API前缀
+const API_PREFIX = "/user";
+const ADMIN_PREFIX = "/admin";
+
+// 导出API函数
+export const loginUser = (credentials) => {
+ return request.post(`${API_PREFIX}/login`, credentials).then((response) => {
+ if (response.data && response.data.success) {
+ // 保存token和用户信息到localStorage
+ localStorage.setItem("token", response.data.data.token);
+ localStorage.setItem("user", JSON.stringify(response.data.data.user));
+ return response.data;
+ } else {
+ return Promise.reject(new Error(response.data.message || "登录失败"));
+ }
+ });
+};
+
+export const adminLogin = (credentials) => {
+ return request.post(`${ADMIN_PREFIX}/login`, credentials).then((response) => {
+ if (response.data && response.data.success) {
+ // 保存token和用户信息到localStorage
+ localStorage.setItem("token", response.data.data.token);
+ localStorage.setItem("user", JSON.stringify(response.data.data.user));
+ return response.data;
+ } else {
+ return Promise.reject(new Error(response.data.message || "管理员登录失败"));
+ }
+ });
+};
+
+export const registerUser = (userData) => {
+ return request.post(`${API_PREFIX}/register`, userData).then((response) => {
+ if (response.data && response.data.success) {
+ return response.data;
+ } else {
+ return Promise.reject(new Error(response.data.message || "注册失败"));
+ }
+ });
+};
+
+export const updateUsername = (username, newUsername) => {
+ const token = localStorage.getItem("token");
+ return request
+ .post(`${API_PREFIX}/update/username`,
+ { username, newUsername },
+ { headers: { token } })
+ .then((response) => {
+ if (response.data && response.data.success) {
+ // 更新本地存储的用户信息
+ const user = JSON.parse(localStorage.getItem("user") || "{}");
+ user.username = newUsername;
+ localStorage.setItem("user", JSON.stringify(user));
+ return response.data;
+ } else {
+ return Promise.reject(
+ new Error(response.data.message || "修改用户名失败")
+ );
+ }
+ });
+};
+
+export const updatePassword = (username, newPassword) => {
+ const token = localStorage.getItem("token");
+ return request
+ .post(`${API_PREFIX}/update/password`,
+ { username, newPassword },
+ { headers: { token } })
+ .then((response) => {
+ if (response.data && response.data.success) {
+ return response.data;
+ } else {
+ return Promise.reject(
+ new Error(response.data.message || "修改密码失败")
+ );
+ }
+ });
+};
+
+export const updateEmail = (username, newEmail) => {
+ const token = localStorage.getItem("token");
+ return request
+ .post(`${API_PREFIX}/update/email`,
+ { username, newEmail },
+ { headers: { token } })
+ .then((response) => {
+ if (response.data && response.data.success) {
+ // 更新本地存储的用户信息
+ const user = JSON.parse(localStorage.getItem("user") || "{}");
+ user.email = newEmail;
+ localStorage.setItem("user", JSON.stringify(user));
+ return response.data;
+ } else {
+ return Promise.reject(
+ new Error(response.data.message || "修改邮箱失败")
+ );
+ }
+ });
+};
+
+export const getUserInfo = (username) => {
+ const token = localStorage.getItem("token");
+ return request
+ .get(`${API_PREFIX}/get/info?username=${username}`,
+ { headers: { token } })
+ .then((response) => {
+ if (response.data && response.data.success) {
+ return response.data;
+ } else {
+ return Promise.reject(
+ new Error(response.data.message || "获取用户信息失败")
+ );
+ }
+ });
+};
+
+export const getUserList = (username) => {
+ const token = localStorage.getItem("token");
+ return request
+ .get(`/user/list?username=${username}`,
+ { headers: { token } })
+ .then((response) => {
+ if (response.data && response.data.success) {
+ return response.data;
+ } else {
+ return Promise.reject(
+ new Error(response.data.message || "获取用户列表失败")
+ );
+ }
+ });
+};
+
+export const deleteUser = (username, targetUsername) => {
+ const token = localStorage.getItem("token");
+ return request
+ .delete(`/user/delete`,
+ {
+ headers: { token },
+ data: { username, targetUsername }
+ })
+ .then((response) => {
+ if (response.data && response.data.success) {
+ return response.data;
+ } else {
+ return Promise.reject(
+ new Error(response.data.message || "删除用户失败")
+ );
+ }
+ });
+};
+
+export const logoutUser = () => {
+ // 清除本地存储
+ localStorage.removeItem("token");
+ localStorage.removeItem("user");
+
+ return Promise.resolve({
+ success: true,
+ message: "注销成功"
+ });
+};