Sur le frontend, j'utilise ReactJs et j'ai essayé d'obtenir les données de l'utilisateur connecté depuis le backend (PHP) via axios.get, définir une condition pour l'utilisateur et si elle est remplie, elle sera renvoyée à la page de connexion Le backend ne renvoie rien et le retour apparaît. En cas de connexion, car le fichier dans lequel le front-end est chargé de traiter les données est vide, rien n'est renvoyé.
J'ai configuré la session, remplacé $_SESSION[] par $_POST[] et placé ces extraits de code en haut de la page :
error_reporting(E_ALL); ini_set('display_errors','1');
Mais rien ne fonctionne et l'erreur ne s'affiche pas. J'ai également testé dans Postman et il est revenu vide, mais lorsque j'ai testé dans x-www-form-urlencoded avec tout défini et les clés et valeurs écrites de toutes les manières possibles, il a renvoyé une erreur 400, tous les champs doivent être remplis .
Ci-dessous, je publierai des extraits de code pour la connexion et l'enregistrement (où la saisie de l'utilisateur est traitée pour être envoyée à la base de données).
Connexion
$db = _db(); try { $q=$db->prepare("SELECT * FROM users WHERE email = :email"); $q->bindValue(":email", $_POST["email"]); $q->execute(); $row = $q->fetch(); if(!empty($row)){ if (password_verify($_POST["password"], $row["password"])) { $user = array( "user_id" => $row["user_id"], "first_name" => $row["first_name"], "last_name" => $row["last_name"], "email" => $row["email"], "company" => $row["company"], "phone_number" => $row["phone_number"], "verified" => $row["verified"], "token" => $row["token"], ); header("Content-type: application/x-www-form-urlencoded"); http_response_code(200); echo json_encode($user); exit(); } else { header("Content-type: application/x-www-form-urlencoded"); http_response_code(400); echo json_encode("Wrong email or password"); exit(); } } else { header("Content-type: application/x-www-form-urlencoded"); http_response_code(400); echo json_encode("User does not exist"); exit(); }
Inscription - Définissez également $_SESSION ici car après avoir confirmé le compte, je prévois de rediriger l'utilisateur directement vers le tableau de bord
$q=$db->prepare("INSERT INTO users(user_id, first_name, last_name, company, email, phone_number, password, forgot_password, token, verified) VALUES(:user_id, :first_name, :last_name, :company, :email, :phone_number, :password, :forgot_password, :token, :verified)"); $q->bindValue(":user_id", null); $q->bindValue(":first_name", $firstName); $q->bindValue(":last_name", $lastName); $q->bindValue(":company", $company); $q->bindValue(":email", $email); $q->bindValue(":phone_number", $phoneNumber); $q->bindValue(":password", $passwordHash); $q->bindValue(":forgot_password", $forgotPass); $q->bindValue(":token", $token); $q->bindValue(":verified", false); $q->execute(); $user_id = $db->lastInsertId(); $to_email = $email; $subject = "Email subject"; $message = "Click on the following link to verify your account: <a href='http://localhost/api/confirm_account.php?token=$token'>Confirm your account</a>"; require_once(__DIR__."/emailVerification/send_email.php"); $user = array( "user_id" => $_SESSION["user_id"] = $row["user_id"], "first_name" => $_SESSION["first_name"] = $row["first_name"], "last_name" => $_SESSION["last_name"] = $row["last_name"], "email" => $_SESSION["email"] = $row["email"], "company" => $_SESSION["company"] = $row["company"], "phone_number" => $_SESSION["phone_number"] = $row["phone_number"], "verified" => $_SESSION["verified"] = $row["verified"], "token" => $_SESSION["token"] = $row["token"], ); header("Content-type: application/json"); http_response_code(200); echo json_encode($user); exit(); } }
C'est ainsi que je gère les requêtes POST/GET sur le frontend
const handleLogInSubmit = (event) => { event.preventDefault(); axios .post("http://localhost/api/login.php", { email: userInput.email, password: userInput.password, }) .then((response) => { if (response.data) { navigate("/dashboard"); } else { setErrorMessage("Login failed, try again"); } }) useEffect(() => { axios.get("http://localhost/api/login.php") .then((response) => { if(response.data){ setUser(response.data); console.log(response.data) } else { console.log(response) navigate("/login"); } }); }, [navigate]);
Sortie du fichier login.php
Si vous avez besoin de voir le reste du code frontend et backend, veuillez me le faire savoir.
Éditeur :
Maintenant, je peux voir ce qui ne va pas avec le code mais même après avoir reçu le message Connexion réussie Je continue d'être redirigé vers la page de connexion et je vois juste qu'axios.get ne récupère rien, seulement axios.post fonctionne :
Le problème est que vous envoyez
JSON
数据,但尝试使用$_POST
来提取它 根据文档适用于x-www-form-urlencoded
或multipart/form-data
les données du formulaire depuis le frontend.Au lieu d'envoyer des données JSON, vous pouvez envoyer les données attendues par votre backend, qui sont une chaîne de paramètres de requête :