feat(sprint1-step4): SuperOAuth login frontend

- AuthContext : fix exports, x-auth-token header, loginWithOAuth(), suppression axios/jwt-decode
- Login.jsx : redirect SuperOAuth Discord avec tenantId=clickerz
- AuthCallback.jsx : extraction token query param, flow OAuth complet
- .env.sample : ajout VITE_SUPEROAUTH_URL
- Mode invité préservé (pas de route guard)
This commit is contained in:
2026-03-20 13:40:33 +01:00
parent a52746ed0c
commit d215e9a33e
4 changed files with 127 additions and 25 deletions

View File

@@ -0,0 +1,46 @@
import { useEffect, useState } from "react";
import { useNavigate, useSearchParams, Link } from "react-router-dom";
import { useAuth } from "../context/AuthContext";
import "../scss/pages.scss";
export default function AuthCallback() {
const [searchParams] = useSearchParams();
const { loginWithOAuth } = useAuth();
const navigate = useNavigate();
const [error, setError] = useState(null);
useEffect(() => {
const token = searchParams.get("token");
if (!token) {
setError("Token manquant dans l'URL.");
return;
}
loginWithOAuth(token)
.then(() => navigate("/", { replace: true }))
.catch((err) => setError(err.message || "Erreur de connexion."));
}, []);
if (error) {
return (
<section>
<div className="containererror">
<h1>Erreur de connexion</h1>
<p className="message">{error}</p>
<Link className="btn-return" to="/login">
Retour au login
</Link>
</div>
</section>
);
}
return (
<section>
<div className="containererror">
<p className="message">Connexion en cours...</p>
</div>
</section>
);
}