登陆注册与忘记密码前后端与jwt配置
Change-Id: Ide4ca3ea34609fdb33ea027e28169852fa41784a
diff --git a/rhj/frontend/src/utils/auth.js b/rhj/frontend/src/utils/auth.js
new file mode 100644
index 0000000..d04e102
--- /dev/null
+++ b/rhj/frontend/src/utils/auth.js
@@ -0,0 +1,155 @@
+// 认证相关的工具函数
+
+/**
+ * 获取当前用户的认证token
+ * @returns {string|null} 认证token,如果未登录则返回null
+ */
+export const getAuthToken = () => {
+ // 优先从localStorage获取(记住我的情况)
+ const localToken = localStorage.getItem('authToken');
+ if (localToken) {
+ return localToken;
+ }
+
+ // 然后从sessionStorage获取(不记住我的情况)
+ const sessionToken = sessionStorage.getItem('authToken');
+ return sessionToken;
+};
+
+/**
+ * 获取当前用户信息
+ * @returns {object|null} 用户信息,如果未登录则返回null
+ */
+export const getUserInfo = () => {
+ // 优先从localStorage获取
+ const localUserInfo = localStorage.getItem('userInfo');
+ if (localUserInfo) {
+ try {
+ return JSON.parse(localUserInfo);
+ } catch (error) {
+ console.error('解析localStorage中的用户信息失败:', error);
+ }
+ }
+
+ // 然后从sessionStorage获取
+ const sessionUserInfo = sessionStorage.getItem('userInfo');
+ if (sessionUserInfo) {
+ try {
+ return JSON.parse(sessionUserInfo);
+ } catch (error) {
+ console.error('解析sessionStorage中的用户信息失败:', error);
+ }
+ }
+
+ return null;
+};
+
+/**
+ * 检查用户是否已登录
+ * @returns {boolean} 是否已登录
+ */
+export const isLoggedIn = () => {
+ const token = getAuthToken();
+ return !!token;
+};
+
+/**
+ * 获取记住的登录信息
+ * @returns {object} 包含email, password, rememberMe的对象
+ */
+export const getRememberedLoginInfo = () => {
+ const email = localStorage.getItem('rememberedEmail') || '';
+ const password = localStorage.getItem('rememberedPassword') || '';
+ const rememberMe = localStorage.getItem('rememberMe') === 'true';
+
+ return {
+ email,
+ password,
+ rememberMe
+ };
+};
+
+/**
+ * 保存记住的登录信息
+ * @param {string} email 邮箱
+ * @param {string} password 密码
+ * @param {boolean} remember 是否记住
+ */
+export const saveRememberedLoginInfo = (email, password, remember) => {
+ if (remember) {
+ localStorage.setItem('rememberedEmail', email);
+ localStorage.setItem('rememberedPassword', password);
+ localStorage.setItem('rememberMe', 'true');
+ } else {
+ localStorage.removeItem('rememberedEmail');
+ localStorage.removeItem('rememberedPassword');
+ localStorage.removeItem('rememberMe');
+ }
+};
+
+/**
+ * 保存用户认证信息
+ * @param {string} token 认证token
+ * @param {object} userInfo 用户信息
+ * @param {boolean} remember 是否记住登录状态
+ */
+export const saveAuthInfo = (token, userInfo, remember = false) => {
+ if (remember) {
+ // 记住我:保存到localStorage
+ localStorage.setItem('authToken', token);
+ localStorage.setItem('userInfo', JSON.stringify(userInfo));
+
+ // 清除sessionStorage
+ sessionStorage.removeItem('authToken');
+ sessionStorage.removeItem('userInfo');
+ } else {
+ // 不记住我:保存到sessionStorage
+ sessionStorage.setItem('authToken', token);
+ sessionStorage.setItem('userInfo', JSON.stringify(userInfo));
+
+ // 清除localStorage中的认证信息(但保留记住的登录表单信息)
+ localStorage.removeItem('authToken');
+ localStorage.removeItem('userInfo');
+ }
+};
+
+/**
+ * 清除所有认证信息(退出登录)
+ * @param {boolean} clearRemembered 是否同时清除记住的登录信息
+ */
+export const clearAuthInfo = (clearRemembered = false) => {
+ // 清除认证token和用户信息
+ localStorage.removeItem('authToken');
+ localStorage.removeItem('userInfo');
+ sessionStorage.removeItem('authToken');
+ sessionStorage.removeItem('userInfo');
+
+ // 如果需要,清除记住的登录信息
+ if (clearRemembered) {
+ localStorage.removeItem('rememberedEmail');
+ localStorage.removeItem('rememberedPassword');
+ localStorage.removeItem('rememberMe');
+ }
+};
+
+/**
+ * 创建带认证头的fetch请求配置
+ * @param {object} options 原始fetch配置
+ * @returns {object} 带认证头的fetch配置
+ */
+export const createAuthenticatedRequest = (options = {}) => {
+ const token = getAuthToken();
+
+ if (!token) {
+ throw new Error('用户未登录');
+ }
+
+ return {
+ ...options,
+ headers: {
+ ...options.headers,
+ 'Authorization': `Bearer ${token}`,
+ 'Content-Type': 'application/json'
+ }
+ };
+};