diff --git a/README.md b/README.md index d4afed3..b3d747a 100644 --- a/README.md +++ b/README.md @@ -102,6 +102,10 @@ VITE_APPWRITE_ENDPOINT=https://appwrite.webklar.com/v1 VITE_APPWRITE_PROJECT_ID=696b82bb0036d2e547ad ``` +### CORS / Production (z. B. https://www.eship.pro) + +Wenn die App unter einer anderen Domain läuft als im Appwrite-Projekt eingetragen, blockiert der Browser die Requests (CORS). **Lösung:** Im [Appwrite Console](https://appwrite.io/docs/console) unter dem Projekt → **Auth** → **Settings** → **Platforms** die genaue App-URL als Plattform hinzufügen (z. B. `https://www.eship.pro`). Ohne diesen Eintrag bleibt `Access-Control-Allow-Origin` auf einer anderen Domain (z. B. `https://webklar.com`) und Anfragen von eship.pro schlagen fehl. + ### Extension Backend URL (Extension/background.js) ```javascript const BACKEND_URL = "http://localhost:3000"; // Anpassen falls nötig diff --git a/Server/src/App.jsx b/Server/src/App.jsx index 5276a57..b8fa5dd 100644 --- a/Server/src/App.jsx +++ b/Server/src/App.jsx @@ -28,6 +28,17 @@ import { fetchManagedAccounts } from "./services/accountsService"; import { useScan } from "./context/ScanContext"; import ScanningLoader from "./components/ui/ScanningLoader"; +/** Prüft, ob der Fehler wie ein CORS- oder Netzwerkfehler aussieht (Request wird vom Browser blockiert). */ +function isCorsOrNetworkError(e) { + const msg = (e?.message || "").toLowerCase(); + return ( + msg.includes("failed to fetch") || + msg.includes("network error") || + msg.includes("networkrequestfailed") || + (e?.name && e.name.toLowerCase().includes("network")) + ); +} + export default function App() { const { route, navigate } = useHashRoute(); const { scanning, scanProgress } = useScan(); @@ -125,7 +136,10 @@ export default function App() { await handoffJwtToExtension(); } catch (e) { - setStatus({ loading: false, authed: false, error: "" }); + const errorMsg = isCorsOrNetworkError(e) + ? "Verbindung zum Auth-Server fehlgeschlagen. Bitte in Appwrite die aktuelle App-URL (z. B. https://www.eship.pro) unter Platforms eintragen (CORS)." + : ""; + setStatus({ loading: false, authed: false, error: errorMsg }); setAuthUser(null); setHasUserDoc(false); setUserExtensionLoad(null); @@ -177,7 +191,10 @@ export default function App() { await handoffJwtToExtension(); } catch (e) { - setStatus({ loading: false, authed: false, error: "Login fehlgeschlagen" }); + const errorMsg = isCorsOrNetworkError(e) + ? "Verbindung blockiert (CORS). In Appwrite unter Auth → Platforms die App-URL (z. B. https://www.eship.pro) hinzufügen." + : "Login fehlgeschlagen"; + setStatus({ loading: false, authed: false, error: errorMsg }); setAuthUser(null); setHasUserDoc(false); setUserExtensionLoad(null);