diff --git a/src/components/Auth/AuthFormContent.js b/src/components/Auth/AuthFormContent.js index 370415d5..8343bd05 100644 --- a/src/components/Auth/AuthFormContent.js +++ b/src/components/Auth/AuthFormContent.js @@ -37,7 +37,8 @@ import WechatRegister from './WechatRegister'; // API配置 const isProduction = process.env.NODE_ENV === 'production'; -const API_BASE_URL = isProduction ? "" : "http://49.232.185.254:5001"; +// 使用空字符串让请求通过 webpack proxy,避免跨域 cookie 问题 +const API_BASE_URL = ""; // 统一配置对象 const AUTH_CONFIG = { @@ -154,12 +155,12 @@ export default function AuthFormContent() { try { setSendingCode(true); - const response = await fetch(`${API_BASE_URL}/api/auth/send-verification-code`, { + const response = await fetch('/api/auth/send-verification-code', { method: 'POST', headers: { 'Content-Type': 'application/json', }, - credentials: 'include', + credentials: 'include', // 必须包含以支持跨域 session cookie body: JSON.stringify({ credential, type: 'phone', @@ -243,12 +244,12 @@ export default function AuthFormContent() { }; // 调用API(根据模式选择不同的endpoint - const response = await fetch(`${API_BASE_URL}/api/auth/login-with-code`, { + const response = await fetch('/api/auth/login-with-code', { method: 'POST', headers: { 'Content-Type': 'application/json', }, - credentials: 'include', + credentials: 'include', // 必须包含以支持跨域 session cookie body: JSON.stringify(requestBody), }); diff --git a/src/components/contexts/AuthContext.js b/src/components/contexts/AuthContext.js index e65f097c..a697984e 100644 --- a/src/components/contexts/AuthContext.js +++ b/src/components/contexts/AuthContext.js @@ -3,10 +3,6 @@ import React, { createContext, useContext, useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { useToast } from '@chakra-ui/react'; -// API基础URL配置 -const isProduction = process.env.NODE_ENV === 'production'; -const API_BASE_URL = isProduction ? "" : process.env.REACT_APP_API_URL || "http://49.232.185.254:5001"; - // 创建认证上下文 const AuthContext = createContext(); @@ -32,7 +28,7 @@ export const AuthProvider = ({ children }) => { try { console.log('🔍 检查Session状态...'); - const response = await fetch(`${API_BASE_URL}/api/auth/session`, { + const response = await fetch(`/api/auth/session`, { method: 'GET', credentials: 'include', // 重要:包含cookie headers: { @@ -103,14 +99,14 @@ export const AuthProvider = ({ children }) => { formData.append('username', credential); } - console.log('📤 发送登录请求到:', `${API_BASE_URL}/api/auth/login`); + console.log('📤 发送登录请求到:', `/api/auth/login`); console.log('📝 请求数据:', { credential, loginType, formData: formData.toString() }); - const response = await fetch(`${API_BASE_URL}/api/auth/login`, { + const response = await fetch(`/api/auth/login`, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', @@ -181,7 +177,7 @@ export const AuthProvider = ({ children }) => { formData.append('email', email); formData.append('password', password); - const response = await fetch(`${API_BASE_URL}/api/auth/register`, { + const response = await fetch(`/api/auth/register`, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', @@ -232,7 +228,7 @@ export const AuthProvider = ({ children }) => { try { setIsLoading(true); - const response = await fetch(`${API_BASE_URL}/api/auth/register/phone`, { + const response = await fetch(`/api/auth/register/phone`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -288,7 +284,7 @@ export const AuthProvider = ({ children }) => { try { setIsLoading(true); - const response = await fetch(`${API_BASE_URL}/api/auth/register/email`, { + const response = await fetch(`/api/auth/register/email`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -342,11 +338,12 @@ export const AuthProvider = ({ children }) => { // 发送手机验证码 const sendSmsCode = async (phone) => { try { - const response = await fetch(`${API_BASE_URL}/api/auth/send-sms-code`, { + const response = await fetch(`/api/auth/send-sms-code`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, + credentials: 'include', // 必须包含以支持跨域 session cookie body: JSON.stringify({ phone }) }); @@ -384,11 +381,12 @@ export const AuthProvider = ({ children }) => { // 发送邮箱验证码 const sendEmailCode = async (email) => { try { - const response = await fetch(`${API_BASE_URL}/api/auth/send-email-code`, { + const response = await fetch(`/api/auth/send-email-code`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, + credentials: 'include', // 必须包含以支持跨域 session cookie body: JSON.stringify({ email }) }); @@ -427,7 +425,7 @@ export const AuthProvider = ({ children }) => { const logout = async () => { try { // 调用后端登出API - await fetch(`${API_BASE_URL}/api/auth/logout`, { + await fetch(`/api/auth/logout`, { method: 'POST', credentials: 'include' }); @@ -476,7 +474,7 @@ export const AuthProvider = ({ children }) => { } // 获取用户权限信息 - const response = await fetch(`${API_BASE_URL}/api/subscription/permissions`, { + const response = await fetch(`/api/subscription/permissions`, { method: 'GET', credentials: 'include', headers: { diff --git a/src/contexts/AuthContext.js b/src/contexts/AuthContext.js index ee17ee83..9566616a 100755 --- a/src/contexts/AuthContext.js +++ b/src/contexts/AuthContext.js @@ -3,10 +3,6 @@ import React, { createContext, useContext, useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { useToast } from '@chakra-ui/react'; -// API基础URL配置 -const isProduction = process.env.NODE_ENV === 'production'; -const API_BASE_URL = isProduction ? "" : process.env.REACT_APP_API_URL || "http://49.232.185.254:5001"; - // 创建认证上下文 const AuthContext = createContext(); @@ -36,7 +32,7 @@ export const AuthProvider = ({ children }) => { const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 5000); // 5秒超时 - const response = await fetch(`${API_BASE_URL}/api/auth/session`, { + const response = await fetch(`/api/auth/session`, { method: 'GET', credentials: 'include', // 重要:包含cookie headers: { @@ -114,14 +110,14 @@ export const AuthProvider = ({ children }) => { formData.append('username', credential); } - console.log('📤 发送登录请求到:', `${API_BASE_URL}/api/auth/login`); + console.log('📤 发送登录请求到:', `/api/auth/login`); console.log('📝 请求数据:', { credential, loginType, formData: formData.toString() }); - const response = await fetch(`${API_BASE_URL}/api/auth/login`, { + const response = await fetch(`/api/auth/login`, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', @@ -194,7 +190,7 @@ export const AuthProvider = ({ children }) => { formData.append('email', email); formData.append('password', password); - const response = await fetch(`${API_BASE_URL}/api/auth/register`, { + const response = await fetch(`/api/auth/register`, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', @@ -245,7 +241,7 @@ export const AuthProvider = ({ children }) => { try { setIsLoading(true); - const response = await fetch(`${API_BASE_URL}/api/auth/register/phone`, { + const response = await fetch(`/api/auth/register/phone`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -301,7 +297,7 @@ export const AuthProvider = ({ children }) => { try { setIsLoading(true); - const response = await fetch(`${API_BASE_URL}/api/auth/register/email`, { + const response = await fetch(`/api/auth/register/email`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -355,11 +351,12 @@ export const AuthProvider = ({ children }) => { // 发送手机验证码 const sendSmsCode = async (phone) => { try { - const response = await fetch(`${API_BASE_URL}/api/auth/send-sms-code`, { + const response = await fetch(`/api/auth/send-sms-code`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, + credentials: 'include', // 必须包含以支持跨域 session cookie body: JSON.stringify({ phone }) }); @@ -397,11 +394,12 @@ export const AuthProvider = ({ children }) => { // 发送邮箱验证码 const sendEmailCode = async (email) => { try { - const response = await fetch(`${API_BASE_URL}/api/auth/send-email-code`, { + const response = await fetch(`/api/auth/send-email-code`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, + credentials: 'include', // 必须包含以支持跨域 session cookie body: JSON.stringify({ email }) }); @@ -440,7 +438,7 @@ export const AuthProvider = ({ children }) => { const logout = async () => { try { // 调用后端登出API - await fetch(`${API_BASE_URL}/api/auth/logout`, { + await fetch(`/api/auth/logout`, { method: 'POST', credentials: 'include' }); diff --git a/src/services/eventService.js b/src/services/eventService.js index 132a098f..f035e3d1 100755 --- a/src/services/eventService.js +++ b/src/services/eventService.js @@ -1,15 +1,10 @@ // src/services/eventService.js -// 判断当前是否是生产环境 -const isProduction = process.env.NODE_ENV === 'production'; -const API_BASE_URL = isProduction ? "" : process.env.REACT_APP_API_URL; -//const API_BASE_URL = process.env.REACT_APP_API_URL || "http://49.232.185.254:5001"; - const apiRequest = async (url, options = {}) => { try { - console.log(`Making API request to: ${API_BASE_URL}${url}`); + console.log(`Making API request to: ${url}`); - const response = await fetch(`${API_BASE_URL}${url}`, { + const response = await fetch(url, { ...options, headers: { 'Content-Type': 'application/json', @@ -322,7 +317,7 @@ export const stockService = { } const url = `/api/stock/${stockCode}/kline?${params.toString()}`; - console.log(`获取K线数据: ${API_BASE_URL}${url}`); + console.log(`获取K线数据: ${url}`); const response = await apiRequest(url); @@ -387,7 +382,7 @@ export const indexService = { } const url = `/api/index/${indexCode}/kline?${params.toString()}`; - console.log(`获取指数K线数据: ${API_BASE_URL}${url}`); + console.log(`获取指数K线数据: ${url}`); const response = await apiRequest(url); return response; } catch (error) { diff --git a/src/views/Authentication/SignIn/SignInIllustration.js b/src/views/Authentication/SignIn/SignInIllustration.js index 09126b10..7cec1378 100755 --- a/src/views/Authentication/SignIn/SignInIllustration.js +++ b/src/views/Authentication/SignIn/SignInIllustration.js @@ -32,10 +32,6 @@ import AuthFooter from "../../../components/Auth/AuthFooter"; import VerificationCodeInput from "../../../components/Auth/VerificationCodeInput"; import WechatRegister from "../../../components/Auth/WechatRegister"; -// API配置 -const isProduction = process.env.NODE_ENV === 'production'; -const API_BASE_URL = isProduction ? "" : "http://49.232.185.254:5001"; - export default function SignInIllustration() { const navigate = useNavigate(); const location = useLocation(); @@ -174,7 +170,7 @@ export default function SignInIllustration() { try { setSendingCode(true); - const response = await fetch(`${API_BASE_URL}/api/auth/send-verification-code`, { + const response = await fetch('/api/auth/send-verification-code', { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -234,7 +230,7 @@ export default function SignInIllustration() { // 验证码登录函数 const loginWithVerificationCode = async (credential, verificationCode, authLoginType) => { try { - const response = await fetch(`${API_BASE_URL}/api/auth/login-with-code`, { + const response = await fetch('/api/auth/login-with-code', { method: 'POST', headers: { 'Content-Type': 'application/json', diff --git a/src/views/Community/components/EventDiscussionModal.js b/src/views/Community/components/EventDiscussionModal.js index 9cb7f116..f6d81bcb 100644 --- a/src/views/Community/components/EventDiscussionModal.js +++ b/src/views/Community/components/EventDiscussionModal.js @@ -42,9 +42,6 @@ import { format } from 'date-fns'; import { zhCN } from 'date-fns/locale'; import { eventService } from '../../../services/eventService'; -// 获取 API 基础地址 -const API_BASE_URL = process.env.NODE_ENV === 'production' ? '' : (process.env.REACT_APP_API_URL || 'http://49.232.185.254:5001'); - const EventDiscussionModal = ({ isOpen, onClose, eventId, eventTitle, discussionType = '事件讨论' }) => { const [posts, setPosts] = useState([]); const [newPostContent, setNewPostContent] = useState(''); @@ -67,7 +64,7 @@ const EventDiscussionModal = ({ isOpen, onClose, eventId, eventTitle, discussion setLoading(true); try { - const response = await fetch(`${API_BASE_URL}/api/events/${eventId}/posts?sort=latest&page=1&per_page=20`, { + const response = await fetch(`/api/events/${eventId}/posts?sort=latest&page=1&per_page=20`, { method: 'GET', headers: { 'Content-Type': 'application/json' }, credentials: 'include' @@ -101,7 +98,7 @@ const EventDiscussionModal = ({ isOpen, onClose, eventId, eventTitle, discussion const loadPostComments = async (postId) => { setLoadingComments(prev => ({ ...prev, [postId]: true })); try { - const response = await fetch(`${API_BASE_URL}/api/posts/${postId}/comments?sort=latest`, { + const response = await fetch(`/api/posts/${postId}/comments?sort=latest`, { method: 'GET', headers: { 'Content-Type': 'application/json' }, credentials: 'include' @@ -134,7 +131,7 @@ const EventDiscussionModal = ({ isOpen, onClose, eventId, eventTitle, discussion setSubmitting(true); try { - const response = await fetch(`${API_BASE_URL}/api/events/${eventId}/posts`, { + const response = await fetch(`/api/events/${eventId}/posts`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, credentials: 'include', @@ -182,7 +179,7 @@ const EventDiscussionModal = ({ isOpen, onClose, eventId, eventTitle, discussion if (!window.confirm('确定要删除这个帖子吗?')) return; try { - const response = await fetch(`${API_BASE_URL}/api/posts/${postId}`, { + const response = await fetch(`/api/posts/${postId}`, { method: 'DELETE', headers: { 'Content-Type': 'application/json' }, credentials: 'include' @@ -219,7 +216,7 @@ const EventDiscussionModal = ({ isOpen, onClose, eventId, eventTitle, discussion // 点赞帖子 const handleLikePost = async (postId) => { try { - const response = await fetch(`${API_BASE_URL}/api/posts/${postId}/like`, { + const response = await fetch(`/api/posts/${postId}/like`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, credentials: 'include' @@ -251,7 +248,7 @@ const EventDiscussionModal = ({ isOpen, onClose, eventId, eventTitle, discussion if (!content?.trim()) return; try { - const response = await fetch(`${API_BASE_URL}/api/posts/${postId}/comments`, { + const response = await fetch(`/api/posts/${postId}/comments`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, credentials: 'include', @@ -294,7 +291,7 @@ const EventDiscussionModal = ({ isOpen, onClose, eventId, eventTitle, discussion if (!window.confirm('确定要删除这条评论吗?')) return; try { - const response = await fetch(`${API_BASE_URL}/api/comments/${commentId}`, { + const response = await fetch(`/api/comments/${commentId}`, { method: 'DELETE', headers: { 'Content-Type': 'application/json' }, credentials: 'include'